简体   繁体   English

从一个数据框中绘制多条线并添加辅助轴以绘制不同的数据框 - Pandas

[英]Plotting multiple lines from one dataframe and adding a secondary axis to plot a different dataframe - Pandas

I'm having issues with matplotlib.我在使用 matplotlib 时遇到问题。 I want to make a scatterplot with two y-axes and the two axes should correspond to two different dataframes.我想用两个 y 轴制作一个散点图,两个轴应该对应两个不同的数据框。 But the problem I'm encountering is plotting multiple lines from one dataframe.但我遇到的问题是从一个数据框中绘制多条线。

the first dataframe (IV_dv):第一个数据帧(IV_dv):

**year is the index
year    ninetyeight_x   EC_pmdv     ninetyeight_y   C_pmdv   ninetyeight     B_pmdv
2009    35.69           35.69       39.78           39.78    25.35           25.34
2010    24.0            29.84       31.50           35.64    12.83           19.08
2011    28.43           29.37       31.03           34.10    17.08           18.42
2012    28.24           26.89       37.392          33.31    22.016          17.31
2013    25.83           27.50       27.43           31.95    16.44           18.51

the second dataframe (rainavg):第二个数据框(rainavg):

year    precip
2010    161.798
2011    64.262
2012    62.991
2013    91.440

I want to make a scatterplot with the left y-axis being PM2.5 concentration (ug/m3), which is what columns EC_pmdv, C_pmdv, and B_pmdv are describing.我想制作一个散点图,左 y 轴是 PM2.5 浓度 (ug/m3),这是 EC_pmdv、C_pmdv 和 B_pmdv 列所描述的。 I want the right y-axis to be precipitation (mm).我希望正确的 y 轴是降水量 (mm)。 And I want the x-axis to be year.我希望 x 轴为年份。 I am having trouble plotting all three lines from IVdv (I want to plot x1=IVdv.year, y1=IVdv.EC_pmdv, x2=IVdv.year, y2=IVdv.C_pmdv, x3=IVdv.year, y3=IVdv.B_pmdv).我无法从 IVdv 绘制所有三行(我想绘制 x1=IVdv.year, y1=IVdv.EC_pmdv, x2=IVdv.year, y2=IVdv.C_pmdv, x3=IVdv.year, y3=IVdv.B_pmdv )。 I know how to make two y axes.我知道如何制作两个 y 轴。 I've attached the code I've written so far:我附上了我到目前为止编写的代码:

fig, ax = plt.subplots()
ax.plot(x1=IVdv.index, y1=IVdv.EC_pmdv, x2=IVdv.index, y2=IVdv.C_pmdv, x3=IVdv.index,
        y3=IVdv.B_pmdv, color='k', linewidth=2.0, label1='El Centro',
        label2='Calexico', label3='Brawley', marker='v') 
ax.set_xticks(IVdv.index)
ax.title.set_text('PM2.5 Design Values')
ax.set_ylim(0,100)
ax.set_ylabel('PM2.5 Design Value (ug/m3)')
ax.set_xlabel('Year')

ax2=ax.twinx()
ax2.plot(rainavg.year, rainavg.precip, color='c', 
        linewidth=2.0, label='Imperial County annual precipitation', marker='o')
ax2.set_ylim(25,170)
ax2.set_xticks(rainavg.year)
ax2.set_ylabel('Annual Precipitation Average (mm)')
lines_1, labels_1 = ax.get_legend_handles_labels()
lines_2, labels_2 = ax2.get_legend_handles_labels()

lines = lines_1 + lines_2
labels = labels_1 + labels_2

ax.legend(lines, labels, loc='upper center')

However, it is only plotting rain data.但是,它只是绘制降雨数据。 I don't think this is the correct syntax for this, but I can't seem to find anything to answer my question.我认为这不是正确的语法,但我似乎找不到任何东西来回答我的问题。 I am only finding forums that explain either how to plot multiple lines from one data frame or how to plot two y-axes.我只是发现,无论是讲解如何从一个数据帧如何绘制两个Y轴绘制多行论坛。

plot multiple pandas dataframes in one graph This link says I need to use ax=ax but I'm not sure how to format it while also retaining my secondary y-axis. 在一张图中绘制多个 Pandas 数据框此链接说我需要使用 ax=ax 但我不确定如何在保留辅助 y 轴的同时对其进行格式化。

Let's use pandas plot it is easier:让我们使用熊猫图更容易:

fig, ax = plt.subplots(figsize=(10,8))
IVdv.plot(ax = ax, marker='v')
ax.title.set_text('PM2.5 Design Values')
ax.set_ylim(0,100)
ax.set_ylabel('PM2.5 Design Value (ug/m3)')
ax.set_xlabel('Year')
ax.set_xticks(IVdv.index)

ax2=ax.twinx()
ax2.plot(rainavg.year, rainavg.precip, color='c', 
        linewidth=2.0, label='Imperial County annual precipitation', marker='o')
ax2.set_ylim(25,170)
# ax2.set_xticks(rainavg.year)
ax2.set_ylabel('Annual Precipitation Average (mm)')
lines_1, labels_1 = ax.get_legend_handles_labels()
lines_2, labels_2 = ax2.get_legend_handles_labels()

lines = lines_1 + lines_2
labels = labels_1 + labels_2

ax.legend(lines, labels, loc='upper center')

Output:输出:

在此处输入图片说明

Update for multiple markerstyles and no lines:更新多个标记样式且无行:

fig, ax = plt.subplots(figsize=(10,8))
markerstyles = ['v','o','+','*','.']
for i, col in zip(markerstyles, IVdv):
    IVdv[col].plot(ax = ax, marker=i, linestyle='none')
    
ax.title.set_text('PM2.5 Design Values')
ax.set_ylim(0,100)
ax.set_ylabel('PM2.5 Design Value (ug/m3)')
ax.set_xlabel('Year')
ax.set_xticks(IVdv.index)

ax2=ax.twinx()
ax2.plot(rainavg.year, rainavg.precip, color='c', 
        linewidth=2.0, label='Imperial County annual precipitation', marker='o')
ax2.set_ylim(25,170)
# ax2.set_xticks(rainavg.year)
ax2.set_ylabel('Annual Precipitation Average (mm)')
lines_1, labels_1 = ax.get_legend_handles_labels()
lines_2, labels_2 = ax2.get_legend_handles_labels()

lines = lines_1 + lines_2
labels = labels_1 + labels_2

ax.legend(lines, labels, loc='upper center')

Output:输出:

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 熊猫数据框绘图-从两个子图切换到带有辅助轴的单个图时出现的问题 - Pandas dataframe plotting - issue when switching from two subplots to single plot w/ secondary axis 使用 Pandas 数据框以不同颜色绘制多条线 - Plotting multiple lines, in different colors, with pandas dataframe Plotly:如何在来自同一 Pandas 数据帧的不同列的一个绘图图表中绘制多条线? - Plotly: How to plot multiple lines in one plotly chart from different columns from the same pandas dataframe? 从熊猫数据框中绘制数据线,由一列中的键而不是由不同列标识 - Plotting data lines from pandas dataframe, identified by keys in one column instead by different columns 从熊猫数据框中绘制线 - Plot lines from pandas dataframe Python / Pandas / Bokeh:用数据框中的图例绘制多行 - Python / Pandas / Bokeh: plotting multiple lines with legends from dataframe Matplotlib 从 Dataframe 中的一列绘制不同的线 - Matplotlib plotting different lines from one column in Dataframe 如何 plot 多行在一个 plotly 图表中来自同一列的同一列 pandas Z6A8064B5DF47945550705553? - How to plot multiple lines in one plotly chart from same column from the same pandas dataframe? 从数据框中绘制多条线 - Plot multiple lines from dataframe Plot 线图来自 Pandas dataframe(多线) - Plot line graph from Pandas dataframe (with multiple lines)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM