熊猫& MatPlotLib:在现有散点图或副Versa上绘制条形图

时间:2018-04-23 23:21:08

标签: python pandas matplotlib

我有一个在一个窗口中绘制的折线图(使用绘图(x,y)funstion绘制),然后,是否可以在同一窗口中/上绘制条形图,以便可视化分析绘制的数据?

2 个答案:

答案 0 :(得分:0)

是的,你需要更努力地工作并使用情节的axes

import numpy as np
import matplotlib.pyplot as plt

x= np.arange(5)
y1=np.arange(5)
y2 = np.ones(5)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x,y1)
ax.bar(x,y2)
plt.show()

enter image description here

答案 1 :(得分:0)

响应Mattice,重置索引或玩弄轴设置绘图参数将满足非整数请求。

请允许我演示:

import numpy as np
from pandas import DataFrame as DF
import calendar
import matplotlib.pyplot as plt

cells = {2006: [ 14.0223, 1.7171, 192.08],
         2005: [ 5.1542, 0.6657, 28.5],
         2004: [ 3.3514, 2.2503, 191.83],
         2003: [ 9.1817, 0.4751, 143.83],
         2002: [ 9.9821, 2.2136, 191.91],
         2001: [ 13.701, 2.6296, 50],
         1912: [ 8.5796, 4.4859, 191.91],
         1911: [ 7.2977, 2.0956, 176.06],
         1910: [ 3.9382, 3.1705, 112.19],
         1909: [ 6.8692, 1.9548, 10.83]}
sprint = DF.from_dict(cells, orient="index", columns=['A', 'B', 'cost'])
sprint['total_data'] = sprint.A + sprint.B

sprint = DF.from_dict(cells, orient="index", columns=['A','B','cost'])
sprint['total_data'] = sprint.A + sprint.B
sprint.reset_index(inplace=True)
sprint['Month'] = sprint['index'].apply(lambda x: calendar.month_abbr[int(str(x)[-2:])])
sprint['Year'] = sprint['index'].apply(lambda x: 2000 + int(str(x)[:2]))

我将索引转换为字符串,但如果整数是唯一的,则同样适用于整数。此方法只需使用 sprint.index = sprint.index.astype(str) 将索引转换为字符串即可工作。

sprint.index = sprint.Year.astype(str) + ' ' + sprint.Month

我尝试使用线条在一个图中打印线条,

<块引用>

sprint.plot(y=['A','B','total_data'], use_index=True)

但是,我发现我需要将条形图添加到散点图,因此不得不使用另一种使用 ax.plot 的方法,而不是 DataFrame 的内置方法。从这里,我使用 add_subplot 解析出两个图。我需要解析 for 循环中的列以正确标记。

fig = plt.figure()
ax = fig.add_subplot(111)
for i in ['A','B','total_data']: ax.plot(sprint.index, sprint[i], label=i)
plt.legend(loc='upper right')
plt.xticks(rotation = 70)

然后我能够添加带有自己的 y 轴和图例的辅助条形图,同时使用相同的 x 轴。

axB = ax.twinx()
axB.bar(sprint.index, sprint.cost, fill=False, label='cost')
plt.legend(loc='upper left')
plt.show()

enter image description here