Python 根据标签,创建热图并在其顶部绘制三条不同的线
我有以下数据帧:Python 根据标签,创建热图并在其顶部绘制三条不同的线,python,matplotlib,seaborn,heatmap,line-plot,Python,Matplotlib,Seaborn,Heatmap,Line Plot,我有以下数据帧: val1=np.random.rand(234) val2=np.random.rand(234) val3=np.random.rand(234) wave=np.arange(start=300, stop=1000, step=3) labels=['label1','label2','label3'] df=pd.DataFrame([val1,val2,val3],columns=wave) df['labels']=['label1','label2','labe
val1=np.random.rand(234)
val2=np.random.rand(234)
val3=np.random.rand(234)
wave=np.arange(start=300, stop=1000, step=3)
labels=['label1','label2','label3']
df=pd.DataFrame([val1,val2,val3],columns=wave)
df['labels']=['label1','label2','label3']
df=df.set_index('labels')
以及以下一行:
line=np.random.uniform(low=-1.5, high=1.5, size=(234,))
line_df=pd.DataFrame([wave,line]).T
line_df.columns=['wave','val']
我想用标签创建热图,并在每个标签行中绘制线,作为次轴,如下所示:
我在热图上画了一条线(理论上假设是同一条线)
我可以用这种方式创建热图,但不能按标签画线:
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(rc={'figure.figsize':(25,8.7)},font_scale = 2)
ax =sns.heatmap(df,cmap='Reds').set(title='heatmap')
ax2=plt.twinx()
ax2.plot(line_df['wave'], line_df['val'],color="blue",linewidth=3)
正在寻找为每个y标签添加相同线条的想法。这里是一种创建3个堆叠子地块的方法。单独的子地块允许3条曲线的单独y轴
导入matplotlib.pyplot作为plt
从matplotlib.cm导入ScalarMapable
导入seaborn作为sns
作为pd进口熊猫
将numpy作为np导入
val1=np.random.rand(234)
val2=np.random.rand(234)
val3=np.random.rand(234)
波=np.arange(开始=300,停止=1000,步进=3)
标签=['label1'、'label2'、'label3']
df=pd.DataFrame([val1,val2,val3],columns=wave)
df['labels']=['label1','label2','label3']
df=df.set_索引(“标签”)
line=np.random.uniform(低=1.5,高=1.5,大小=(234,)
line_df=pd.DataFrame([wave,line]).T
行_df.columns=['wave','val']
sns.set(rc={'figure.figsize':(25,8.7)},font_scale=2)
图,axs=plt.subplot(nrows=3,sharex=True,gridspec_kw={'hspace':0})
norm=plt.Normalize(df.to_numpy().min(),df.to_numpy().max())
cmap=‘红色’
对于i,枚举中的ax(axs):
ax.imshow(df.iloc[i:i+1,:]to_numpy(),区段=[wave[0],wave[-1],0,1],aspect='auto',cmap=cmap,norm=norm)
ax.set_yticks([0.5])
ax.set_yticklabels([df.index[i]]))
如果ax==axs[1]:
ax.set_ylabel('标签')
ax2=ax.twinx()
ax2.绘图(线条方向['wave',线条方向['val',color=“blue”,线宽=3)
ax.grid(假)
ax2.网格(错误)
axs[0]。设置标题(“热图”)
plt.colorbar(ScalarMappable(cmap=cmap,norm=norm),ax=axs)
plt.子批次调整(左=0.12,右=0.72)
plt.show()
以下是创建3个堆叠子地块的方法。单独的子地块允许3条曲线的单独y轴
导入matplotlib.pyplot作为plt
从matplotlib.cm导入ScalarMapable
导入seaborn作为sns
作为pd进口熊猫
将numpy作为np导入
val1=np.random.rand(234)
val2=np.random.rand(234)
val3=np.random.rand(234)
波=np.arange(开始=300,停止=1000,步进=3)
标签=['label1'、'label2'、'label3']
df=pd.DataFrame([val1,val2,val3],columns=wave)
df['labels']=['label1','label2','label3']
df=df.set_索引(“标签”)
line=np.random.uniform(低=1.5,高=1.5,大小=(234,)
line_df=pd.DataFrame([wave,line]).T
行_df.columns=['wave','val']
sns.set(rc={'figure.figsize':(25,8.7)},font_scale=2)
图,axs=plt.subplot(nrows=3,sharex=True,gridspec_kw={'hspace':0})
norm=plt.Normalize(df.to_numpy().min(),df.to_numpy().max())
cmap=‘红色’
对于i,枚举中的ax(axs):
ax.imshow(df.iloc[i:i+1,:]to_numpy(),区段=[wave[0],wave[-1],0,1],aspect='auto',cmap=cmap,norm=norm)
ax.set_yticks([0.5])
ax.set_yticklabels([df.index[i]]))
如果ax==axs[1]:
ax.set_ylabel('标签')
ax2=ax.twinx()
ax2.绘图(线条方向['wave',线条方向['val',color=“blue”,线宽=3)
ax.grid(假)
ax2.网格(错误)
axs[0]。设置标题(“热图”)
plt.colorbar(ScalarMappable(cmap=cmap,norm=norm),ax=axs)
plt.子批次调整(左=0.12,右=0.72)
plt.show()
一个想法是创建3个子地块,共享x,子地块之间的距离为零。这样,您可以在右侧有3个不同的y轴。(还要注意,
ax=sns.heatmap(df,cmap='Reds').set(title='heatmap')
使ax
None
。您需要ax=sns.heatmap(df,cmap='Reds')
然后ax.set(title='heatmap')
)创建三个子地块,它们之间共享x和零距离。这样,您可以在右侧有3个不同的y轴。(还要注意,ax=sns.heatmap(df,cmap='Reds').set(title='heatmap')
使ax无。您需要ax=sns.heatmap(df,cmap='Reds')
然后ax.set(title='heatmap')
)