我想使用seaborn将点图和箱图组合成一个图。组合本身有效,但由于两个数据帧的x轴值不在同一范围内,因此输出错误(第二个数据帧的x值将被忽略)。 以下是我的数据集的一部分:
import pandas as pd
bpdata=pd.DataFrame({'Ldate': [20150202, 20150202, 20150202, 20151117, 20151117, 20151117, 20160205, 20160205, 20160205], 'Lreflectance': [0.067, 0.0482, 0.0555, 0.099, 0.0956, 0.0931, 0.0757, 0.0663, 0.0566]})
Mplotdata=pd.DataFrame({'Mdate':[20150202, 20150407,20160202], 'Mreflectance': [0.0868, 0.0833,0.0719]})
Plottet个人:
import seaborn as sns
plot=sns.pointplot(data=Mplotdata, x='Mdate', y='Mreflectance', color='dimgrey', marker='o')
for item in plot.get_xticklabels():
item.set_rotation(45)
plot=sns.boxplot(data=bpdata, x='Ldate', y='Lreflectance', color='lightgray')
for item in plot.get_xticklabels():
item.set_rotation(45)
看起来像这样: pointplot (left) and boxplot (right)
但是当我尝试将pointplot和boxplot放入一个情节时
plot=sns.boxplot(data=bpdata, x='Ldate', y='Lreflectance', color='lightgray')
plot=sns.pointplot(data=Mplotdata, x='Mdate', y='Mreflectance', color='dimgrey', marker='o')
for item in plot.get_xticklabels():
item.set_rotation(45)
它看起来像这样:
在此图中,x轴仅显示第一个图的值。如果我改变了pointplot和boxplot的顺序,它也只会使用第一个数据帧的x值,第二个将被忽略。
知道如何解决这个问题吗?
我在这个论坛,谷歌或matplotlib / seaborn文档中找不到任何解决方案。
答案 0 :(得分:0)
fig, ax = plt.subplots()
ax2 = ax.twiny() # put a second plot on top of it, having the same y axis
data1 = np.random.random(10) #random in [0,1]
data2 = np.random.random(15)+1 #random in [1,2]
ax.plot(np.arange(len(data1)), data1) # plot in the first plot
ax2.plot(np.arange(len(data2)),data2) # plot in the second plot
答案 1 :(得分:0)
谢谢@JürgMerlinSpaak,就是这样:
fig, ax = plt.subplots()
ax2 = ax.twiny()
plot=sns.boxplot(data=bpdata, x='Ldate', y='Lreflectance', color='lightgray', ax=ax)
plot=sns.pointplot(data=Mplotdata, x='Mdate', y='Mreflectance', color='dimgrey', marker='o', ax=ax2)
for item in plot.get_xticklabels():
item.set_rotation(45)
图的大小和方框仍然需要改进,但两个图的组合工作正常。谢谢!