Python:在一个图中组合两个不同的图,但不同的x值范围

时间:2017-08-23 05:12:05

标签: python plot seaborn boxplot

我想使用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)  

它看起来像这样: combined plot

在此图中,x轴仅显示第一个图的值。如果我改变了pointplot和boxplot的顺序,它也只会使用第一个数据帧的x值,第二个将被忽略。

知道如何解决这个问题吗?

我在这个论坛,谷歌或matplotlib / seaborn文档中找不到任何解决方案。

2 个答案:

答案 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)

enter image description here

图的大小和方框仍然需要改进,但两个图的组合工作正常。谢谢!