避免在matplotlib中的X轴上排序,并绘制具有多个y轴的公共X轴

时间:2019-05-28 17:47:45

标签: python python-3.x pandas matplotlib plot

我希望在本文中澄清两个疑问。

我有如下图所示的熊猫df。 enter image description here

1。绘图问题:。 当我尝试绘制column 0 with column 1时,值将被排序。

示例:在col_0中,我的值从112 till 0开始。 当我使用以下代码时,这些值将按升序排序,并且该图显示了X轴反转图。

plt.plot(df.col_0, df.col_1)

enter image description here

避免对X轴值进行排序的最佳方法是什么。 ?

2。单个图中的所有参数 我想在一个图中绘制所有参数。除X轴外,所有其他参数值都在0 to 1之间(相同标度) 什么是最好的pythonic方式。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我不明白您对它们进行排序的意思-它不会绘制112、0.90178并将其连接到110.89899、0.90779等吗?

要共享X轴,但要绘制2个Y轴,请绘制某些集合,use twinx

fig, ax1 = plt.subplots()
ax1.plot(df.col_0, df.col_1)
ax2 = ax1.twinx()
ax2.plot(df.col_0, df.col_2)

re:如何按照所需顺序绘制

我相信您的意图是实际绘制这些值与时间或索引的关系。为此,我建议:

fig, ax1 = plt.subplots()
ax1.plot(df['Time'], df.col_0) # or df.index, df.col_0
ax2 = ax1.twinx()
ax2.plot(df['Time'], df.col_1)

答案 1 :(得分:1)

尝试针对索引绘制系列/数据框:

col_to_draw = [col for col in df.columns if col!='col0']

# if your data frame is indexed as 0,1,2,... ignore this step
tmp_df = df.reset_index()

ax = tmp_df[col_to_draw].plot(figsize=(10,6))
xtick_vals = ax.get_xticks()
ax.set_xticklabels(tmp_df.col0[xtick_vals].tolist())

输出:

enter image description here