Mám dataset z 5 sloupců: a,b,c,d,e . tam, kde typ dat je b str
a ostatní obsahují floats
.
Scatter osy jsou sloupce a a e pro x a y, resp. Normalizované colormap je založen na sloupci e.
Chci přidat dva colorbars, kde se náplň mapy je stejné jako v scatter plot (samozřejmě !), ale číselné klíšťata jsou založeny na sloupcích c a d. V jednom z mých pokusů , jsem se snažil vytvořit dvě postavy, ale nutí první colorbar, aby se jeho hodnoty z druhého obrázku. Ale to nefungovalo.
Moje nejlepší pokusy je níže uvedený kód, který generuje připojeného obrázku. (na základě údajů níže)
Kód bere data pro vykreslení pravidelného colorbar, a běží na stejném bloku opět na druhou colorbar, kde markery povrch (na podruhé) je 0 (což je vtipné ;)
)
EDIT
Přivázal jsem přidat třetí smyčka. tedy : jeden skutečný smyčky pro sloupec e, a dvě falešné smyčky s marker povrch je 0 pro colorbars z c a d data. (viz druhý blok kódu) , nyní značky náplň není správné.
tedy: 1/potřebuji, aby normalizovat dva colorbars ze dvou různých sloupců, ale normalizovat plnění markerů pomocí jednoho sloupce. 2/ chci invertního druhé colorbar osa pro přehlednost. (jako jestli to má opačný normalizované colormap)
[EDIT]: Invertovat druhé colorbar přidat _r na cmap v druhé smyčky :
Díky všem !
Kód 1
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from mpl_toolkits.axes_grid1 import make_axes_locatable
fig, ax = plt.subplots()
a,b,c,d,e = np.loadtxt('test.txt', delimiter='\t', unpack=True,
skiprows=1, dtype=str)
a = a.astype(np.float64)
c = c.astype(np.float64)
d = d.astype(np.float64)
e = e.astype(np.float64)
b = list(b)
#####################################################
# for c
norm = mpl.colors.Normalize(vmin=c.min(), vmax=c.max())
cmap = mpl.cm.ScalarMappable(norm=norm, cmap=mpl.cm.Reds)
cmap.set_array([])
# for d
norm2 = mpl.colors.Normalize(vmin=d.min(), vmax=d.max())
cmap2 = mpl.cm.ScalarMappable(norm=norm2, cmap=mpl.cm.Reds)
cmap2.set_array([])
# real
for i in range(len(b)):
if b[i] == 'alpha':
sc = ax.scatter(a[i], e[i], marker='o', edgecolors='black',
alpha=0.8, s=120, c=e[i], norm=norm,
cmap='Reds'
)
if b[i] == 'beta':
sc = ax.scatter(a[i], e[i], marker='d', edgecolors='black',
alpha=0.8, s=120, c=e[i], norm=norm,
cmap='Reds'
)
# fake
for i in range(len(b)):
if b[i] == 'alpha':
sc1 = ax.scatter(a[i], e[i], marker=',', edgecolors='black',
alpha=0.8, s=0, c=e[i], norm=norm2,
cmap='Reds'
)
if b[i] == 'beta':
sc1 = ax.scatter(a[i], e[i], marker=',', edgecolors='black',
alpha=0.8, s=0, c=e[i], norm=norm2,
cmap='Reds'
)
years_ax = np.linspace(2000, 2021, 21, endpoint=True, dtype=int)
ax.set_xticks(years_ax)
plt.xticks(rotation=45) # Rotates X-Axis Ticks by 45-degrees
plt.grid(True, which="both", ls="-", alpha=0.1)
plt.xlabel('Years', fontsize=14)
plt.ylabel('e', fontsize=14)
ax.tick_params(axis='both', which='major', labelsize=14)
divider = make_axes_locatable(ax)
cba = divider.new_vertical(size='5%', pad=0.5)
cbb = divider.new_vertical(size='5%', pad=0.5)
fig.add_axes(cba)
fig.add_axes(cbb)
# add colorbar #1
cba = plt.colorbar(sc, cax=cba, orientation='horizontal')
ax.xaxis.set_ticks_position('default')
cba.ax.xaxis.set_ticks_position('top')
# add colorbar #2
cbb = plt.colorbar(sc1, cax=cbb, orientation='horizontal')
cbb.ax.invert_yaxis()
ax.xaxis.set_ticks_position('default')
cbb.ax.xaxis.set_ticks_position('top')
plt.show()
Kód 2:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from mpl_toolkits.axes_grid1 import make_axes_locatable
fig, ax = plt.subplots()
a,b,c,d,e = np.loadtxt('test.txt', delimiter='\t', unpack=True,
skiprows=1, dtype=str)
a = a.astype(np.float64)
c = c.astype(np.float64)
d = d.astype(np.float64)
e = e.astype(np.float64)
b = list(b)
#####################################################
# for e
norme = mpl.colors.Normalize(vmin=e.min(), vmax=e.max())
cmape = mpl.cm.ScalarMappable(norm=norme, cmap=mpl.cm.Reds)
cmape.set_array([])
# for c
normc = mpl.colors.Normalize(vmin=c.min(), vmax=c.max())
cmapc = mpl.cm.ScalarMappable(norm=normc, cmap=mpl.cm.Reds)
cmapc.set_array([])
# for d
normd = mpl.colors.Normalize(vmin=e.min(), vmax=e.max())
cmapd = mpl.cm.ScalarMappable(norm=normd, cmap=mpl.cm.Reds_r)
cmapd.set_array([])
# real
for i in range(len(b)):
if b[i] == 'alpha':
sc = ax.scatter(a[i], e[i], marker='o', edgecolors='black',
alpha=0.8, s=120, c=e[i], norm=norme,
cmap='Reds'
)
if b[i] == 'beta':
sc = ax.scatter(a[i], e[i], marker='d', edgecolors='black',
alpha=0.8, s=120, c=e[i], norm=norme,
cmap='Reds'
)
# fake for c
for i in range(len(b)):
if b[i] == 'alpha':
sc = ax.scatter(a[i], e[i], marker='o', edgecolors='black',
alpha=0.8, s=0, c=e[i], norm=normc,
cmap='Reds'
)
if b[i] == 'beta':
sc = ax.scatter(a[i], e[i], marker='d', edgecolors='black',
alpha=0.8, s=0, c=e[i], norm=normc,
cmap='Reds'
)
# fake for d
for i in range(len(b)):
if b[i] == 'alpha':
sc1 = ax.scatter(a[i], e[i], marker=',', edgecolors='black',
alpha=0.8, s=0, c=e[i], norm=normd,
cmap='Reds_r'
)
if b[i] == 'beta':
sc1 = ax.scatter(a[i], e[i], marker=',', edgecolors='black',
alpha=0.8, s=0, c=e[i], norm=normd,
cmap='Reds_r'
)
years_ax = np.linspace(2000, 2021, 21, endpoint=True, dtype=int)
ax.set_xticks(years_ax)
plt.xticks(rotation=45) # Rotates X-Axis Ticks by 45-degrees
plt.grid(True, which="both", ls="-", alpha=0.1)
plt.xlabel('Years', fontsize=14)
plt.ylabel('e', fontsize=14)
ax.tick_params(axis='both', which='major', labelsize=14)
divider = make_axes_locatable(ax)
cba = divider.new_vertical(size='5%', pad=0.5)
cbb = divider.new_vertical(size='5%', pad=0.5)
fig.add_axes(cba)
fig.add_axes(cbb)
# add colorbar #1
cba = plt.colorbar(sc, cax=cba, orientation='horizontal')
ax.xaxis.set_ticks_position('default')
cba.ax.xaxis.set_ticks_position('top')
# add colorbar #2
cbb = plt.colorbar(sc1, cax=cbb, orientation='horizontal')
cbb.ax.invert_yaxis()
ax.xaxis.set_ticks_position('default')
cbb.ax.xaxis.set_ticks_position('top')
plt.show()
Výsledek: výsledek obrazu
Výsledkem třetí pokus (s tři smyčky, a opravit obrácené bary)
údaje vzorku -malé-:
a b c d e
2013 alpha 21.8 47 101.3302752
2013 alpha 5 23 105.8
2009 alpha 38 58 88.52631579
2009 alpha 47 77 126.1489362
2009 alpha 188 55 16.09042553
2009 alpha 267 77 22.20599251
2019 alpha 1.67 10 59.88023952
2020 alpha 31.5 57 103.1428571
2013 beta 19 50 131.5789474
2013 beta 26.8 62.5 145.755597
2013 beta 54.5 95 165.5963303
2013 beta 120.1 123 125.970025
2013 beta 147.6 137.5 128.0911247
2007 alpha 14.5 14.5 14.5
2007 alpha 28.7 28 27.31707317
2007 alpha 42.5 40 37.64705882