使用secondary_y

时间:2018-11-20 18:20:52

标签: python matplotlib

我想用两个y轴在同一图中绘制气象站的温度和降水。但是,当我尝试此操作时,其中一个情节似乎无缘无故被转移了。这是我的代码:(到目前为止,我刚刚尝试了两次降水测量,但是您可以达成协议。)

ax = m_prec_ra.plot()
ax2 = m_prec_po.plot(kind='bar',secondary_y=True,ax=ax)
ax.set_xlabel('Times')
ax.set_ylabel('Left axes label')
ax2.set_ylabel('Right axes label')

这将返回以下图:

My plot is to be found here

我看到有人问同样的问题,但似乎无法弄清楚如何手动移动一个数据集。 这是我的数据:

打印(m_prec_ra,m_prec_po)

    Time
    1      0.593436
    2      0.532058
    3      0.676219
    4      1.780795
    5      4.956048
    6     11.909394
    7     17.820051
    8     14.225257
    9     10.261061
    10     2.628336
    11     0.240568
    12     0.431227
    Name: Precipitation (mm), dtype: float64 Time
    1      0.704339
    2      1.225169
    3      1.905223
    4      4.156270
    5     11.531221
    6     22.246230
    7     30.133800
    8     27.634639
    9     20.693056
    10     5.282412
    11     0.659365
    12     0.622562
    Name: Precipitation (mm), dtype: float64

2 个答案:

答案 0 :(得分:0)

此行为的说明可在this Q & A中找到。

在这里,解决方案是将线条向前移动一号,即针对从0而不是1开始的索引绘图。

import numpy as np; np.random.seed(42)
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({"A" : np.arange(1,11),
                   "B" : np.random.rand(10),
                   "C" : np.random.rand(10)})
df.set_index("A", inplace=True)


ax = df.plot(y='B', kind = 'bar', legend = False)
df2 = df.reset_index()
df2.plot(ax = ax, secondary_y = True, y = 'B', kind = 'line')

plt.show()

enter image description here

答案 1 :(得分:-1)

此绘图使用的是哪个版本的熊猫?

使用0.23.4运行此代码:

df1 = pd.DataFrame({'Data_1':[1,2,4,8,16,12,8,4,1]})
df2 = pd.DataFrame({'Data_2':[1,2,4,8,16,12,8,4,1]})

ax = df1.plot()
ax2 = df2.plot(kind='bar',secondary_y=True,ax=ax)
ax.set_xlabel('Times')
ax.set_ylabel('Left axes label')
ax2.set_ylabel('Right axes label')

我得到:

This graph

如果您想添加样本数据,我们可以看一下。