是否有直接的方法使用pandas绘制区域图,但是垂直定向图?
例如,水平绘制区域图我可以这样做:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df.plot(kind='area');
我可以使用'barh'
df.plot(kind='barh');
但我无法找到一种简单的方法来获得一个垂直的区域图
答案 0 :(得分:5)
pandas不提供垂直堆栈图的原因是matplotlib stackplot
仅用于水平堆栈。
但是,堆栈图最后只是一个填充的线图。因此,您可以通过使用fill_betweenx()
绘制数据来获得所需的绘图。
import pandas as pd
import numpy as np; np.random.rand(42)
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
fig, ax = plt.subplots()
data = np.cumsum(df.values, axis=1)
for i, col in enumerate(df.columns):
ax.fill_betweenx(df.index, data[:,i], label=col, zorder=-i)
ax.margins(y=0)
ax.set_xlim(0, None)
ax.set_axisbelow(False)
ax.legend()
plt.show()
答案 1 :(得分:1)
(应该有更好的解决方案)
绘图 - 旋转90 - 反射垂直
import matplotlib.pyplot as plt
from matplotlib import pyplot, transforms
df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
base = plt.gca().transData
rot = transforms.Affine2D().rotate_deg(90)
reflect_vertical = transforms.Affine2D(np.array([[1, 0, 0], [0, -1, 0], [0, 0, 1]]))
df.plot(kind='area', transform= reflect_vertical + rot + base, ax=plt.gca(), xlim=(0, 3))
plt.gca().set_aspect(0.5)