我想绘制一个多序列直方图,如下所示:
我正在尝试将其添加到现有的Jupyter笔记本中,该笔记本已经具有用于建立双重图表的代码:
fig, (ax, ax2) = plt.subplots(2,1)
现有代码使用的样式是通过对数据对象本身的方法进行绘制的。例如,下面是一些现有代码,它们在一个现有子图中绘制折线图:
ax = termstruct[i].T.plot.line(ax=ax, c=linecolor,
dashes=dash, grid=True, linewidth=width, figsize=FIGURE_SIZE)
我在这里要指出的是,绘制的方法是在Pandas pd.Series(termstruct)上使用.plot.line方法。这与我可以在网上找到用于使用pyplot绘制图表的示例和教程完全不符,但是它可以正常工作,并且可以建立我尝试使用的框架。
因此,我首先采取了明显的步骤,即从上方将subplots调用更改为plt,从而为直方图添加了第三个子图:
fig, (ax, ax2, ax3) = plt.subplots(3,1)
我的数据位于四个单独的pd.Series对象中,其中每个对象代表一个系列,这些系列应映射到本文顶部图表示例中的一种颜色。但是,当我尝试遵循在数据对象上使用方法进行绘制的相同通用编码风格时,似乎总是在X和Y轴与我想要的方向相反的地方结束,就像这样:
生成上面图表的代码是:
ax3 = NakedPNLperMo.plot.hist(ax=ax3,grid=True, figsize=FIGURE_SIZE)
ax3 = H9PNLperMo.plot.hist(ax=ax3, grid=True, figsize=FIGURE_SIZE)
ax3 = H12PNLperMo.plot.hist(ax=ax3, grid=True, figsize=FIGURE_SIZE)
ax3 = H15PNLperMo.plot.hist(ax=ax3, grid=True, figsize=FIGURE_SIZE)
NakedPNLperMo和其他3个pd.Series对象充满了神秘的财务符号,但是其内容的简化版本(为了使之清楚)将是:
NakedPNLperMO = pd.Series(data=[1.2,3.4,5.6,7.8,-2.3,-4.6],
index=['Month 1','Month 2','Month 3','Month 4',
'Month 5','Month 6'])
我的意图/目标是将数据绘制在Y轴上,并且索引值(“月1”等)就像x轴上的列一样,但是无论如何我似乎都无法获得该输出我尝试了什么。
显然,问题是轴已交换。但是,当我寻找解决方法时,我找不到在线示例,该示例遵循使用数据对象上的方法绘制图表的方法。我在在线教程中发现的所有内容都使用了大量的调用来建立图表。更重要的是,在这些示例中,我看不到任何遵循该样式的方法,并且仍然将该程序绘制为该程序已定义的2个子图作为第3个子图。
我的第一个(也是最重要的)问题是下一步我应该尝试...弄清楚如何更改[data-object] .plot.xxx的参数以按照我需要的方式获取轴是否有意义他们,还是遵循完全不同的风格进行一系列的调用来设计和绘制图表会更有意义?前者与我所拥有的一致,但是我找不到使用该编码风格的任何在线帮助。 (我是否应该推断这是一种过时的处理方式?)
如果以上方法的答案是采取调用plt的方法,如似乎所有在线示例都显示的那样,我如何使用将这张图表与现有子图相关联的ax3?如果以上的答案是坚持使用[data-object] .plot.xxx的方法,那么在哪里可以找到有关使用该样式的帮助?我在网上找到的所有示例都遵循不同的编码风格。
当然,最明显的问题是:如何交换轴以使图表看起来正确? :)
谢谢!
答案 0 :(得分:0)
我希望这段代码能对您有所帮助,我创建了三个系列,向您展示如何实现:
/tmp/cct2s339.o:tcpechoserver.c:(.text+0x59): undefined reference to `mbuf_remove'
/tmp/cct2s339.o:tcpechoserver.c:(.text+0x59): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `mbuf_remove'
/tmp/cca6g7CA.o:mongoose.c:(.text+0x6f7a): undefined reference to `mbuf_remove'
/tmp/cca6g7CA.o:mongoose.c:(.text+0x6f7a): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `mbuf_remove'
/tmp/cca6g7CA.o:mongoose.c:(.text+0x7df5): undefined reference to `mbuf_remove'
/tmp/cca6g7CA.o:mongoose.c:(.text+0x7df5): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `mbuf_remove'
/tmp/cca6g7CA.o:mongoose.c:(.text+0xb4f9): undefined reference to `mbuf_remove'
/tmp/cca6g7CA.o:mongoose.c:(.text+0xb4f9): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `mbuf_remove'
/tmp/cca6g7CA.o:mongoose.c:(.text+0xc121): undefined reference to `mbuf_remove'
/tmp/cca6g7CA.o:mongoose.c:(.text+0xc121): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `mbuf_remove'
/tmp/cca6g7CA.o:mongoose.c:(.text+0xc1d0): more undefined references to `mbuf_remove' follow
/tmp/cca6g7CA.o:mongoose.c:(.text+0xc1d0): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `mbuf_remove'
/tmp/cca6g7CA.o:mongoose.c:(.text+0xc22c): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `mbuf_remove'
/tmp/cca6g7CA.o:mongoose.c:(.text+0xc595): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `mbuf_remove'
/tmp/cca6g7CA.o:mongoose.c:(.text+0x12e0b): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `mbuf_remove'
/tmp/cca6g7CA.o:mongoose.c:(.text+0x13df9): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `mbuf_remove'
/tmp/cca6g7CA.o:mongoose.c:(.text+0x1634a): additional relocation overflows omitted from the output
collect2: error: ld returned 1 exit status
make: *** [Makefile:2: echo_server] Error 1
输出:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#jupyter notebook only
%matplotlib inline
s1 = pd.Series(data=[1.2,3.4,5.6,7.8,-2.3,-4.6],
index=['Month 1','Month 2','Month 3','Month 4',
'Month 5','Month 6'])
s2=pd.Series(data=[5,3.4,7.4,-5.1,-2.3,3],
index=['Month 1','Month 2','Month 3','Month 4',
'Month 5','Month 6'])
s3=pd.Series(data=[5,2,-2.4,0,1,3],
index=['Month 1','Month 2','Month 3','Month 4',
'Month 5','Month 6'])
df=pd.concat([s1,s2,s3],axis=1)
df.columns=['s1','s2','s3']
print(df)
ax=df.plot(kind='bar',figsize=(10,10),fontsize=15)
#------------------------------------------------#
plt.xticks(rotation=-45)
#grid on
plt.grid()
# set y=0
ax.axhline(0, color='black', lw=1)
#change size of legend
ax.legend(fontsize=20)
#hiding upper and right axis layout
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
#changing the thickness
ax.spines['bottom'].set_linewidth(3)
ax.spines['left'].set_linewidth(3)
图