我正在尝试生成混合了area
和line
图表的图表。考虑我的数据帧df
df = pd.DataFrame([range(1, 4)] * 5, columns=list('ABC')).assign(B=lambda d: -d.B).cumsum()
还有我的图表
df.C.plot.area(stacked=False)
df.A.plot()
df.B.plot()
请注意,否定系列未显示。
现在,假设我将C
系列的一个条目设为负值
df.loc[3, 'C'] = -1
然后再次绘图
df.C.plot.area(stacked=False)
df.A.plot()
df.B.plot()
这是我所期望的。但是,我确实有C
系列的数据,都是一个符号。如何绘制它,以免其他系列的比例尺被破坏?
# messed up
import pandas as pd
df = pd.DataFrame([range(1, 4)] * 5, columns=list('ABC')).assign(B=lambda d: -d.B).cumsum()
df.C.plot.area(stacked=False)
df.A.plot()
df.B.plot()
# correct but I have to put false data
import pandas as pd
df = pd.DataFrame([range(1, 4)] * 5, columns=list('ABC')).assign(B=lambda d: -d.B).cumsum()
df.loc[3, 'C'] = -1
df.C.plot.area(stacked=False)
df.A.plot()
df.B.plot()
答案 0 :(得分:2)
我不知道,为什么会发生此错误。 *但是您可以强制执行autoscale。如果只想自动缩放一个轴,则可以指定它:
#not messed up anymore
import pandas as pd
df = pd.DataFrame([range(1, 4)] * 5, columns=list('ABC')).assign(B=lambda d: -d.B).cumsum()
df.C.plot.area(stacked=False)
df.A.plot()
df.B.plot()
plt.autoscale(True, axis = "y")
plt.show()
*正如@ImportanceOfBeingErnest在评论中指出的那样,这不是错误,而是面积图的理想行为,很不幸,它与此处的线图发生冲突。
答案 1 :(得分:1)
下面是一个示例,显示了如何显式设置限制:
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame([range(1, 4)] * 5, columns=list('ABC')).assign(B=lambda d: -d.B).cumsum()
df.C.plot.area(stacked=False)
df.A.plot()
df.B.plot()
ymin, ymax = plt.ylim()
plt.ylim( [-ymax,ymax] )
plt.show()
在上面,我们检索了轴范围,然后将下限设置为与上限匹配。您可以用任何合适的方式对此进行详细说明。