我在用Python创建一个堆叠条形图时遇到了问题。我有3个变量的数据如下:
A=[3,5,7] B=[4,5,7] C=[2,3,4,5,6,7]
我希望创建一个条形图,其中包含每个变量的值之间的间隙,如下所示:

有人知道如何用Python创建它吗?非常感谢。
发布于 2019-06-02 13:43:34
您可以将Wolfram语言应用于项目。为开发人员提供了一个免费的Wolfram发动机,通过用于Python的Wolfram客户端库,您可以在C2中使用这些函数。
from wolframclient.evaluation import WolframLanguageSession
from wolframclient.language import wl, wlexpr开始治疗。
wolfSession = WolframLanguageSession();
A=[3,5,7];
B=[4,5,7];
C=[2,3,4,5,6,7];可以应用ArrayPlot或MatrixPlot函数。这些函数采用2D矩阵,因此首先需要转换列表。
使用SparseArray,可以在不显式设置所有职位的值的情况下指定矩阵。空位置设置为下面的''。
pos=wolfSession.evaluate(
wl.Flatten(
wl.MapIndexed(
wl.Function(wl.Rule([wl.First(wl.Slot(2)), wl.Slot(1)], wl.First(wl.Slot(2)))),
[A,B,C],
[2]
),
1
)
);
sparse = wolfSession.evaluate(wl.SparseArray(pos, wl.Automatic, ''));
print(wolfSession.evaluate(wl.Normal(sparse)))[,]
使用自定义ColorRules和FrameTicks获取您的情节的基本表示形式。您可以使用这些选项和许多其他选项来使您的精确外观。
stacked=wolfSession.evaluate(
wl.ArrayPlot(
sparse,
AspectRatio = 1/4,
ColorRules = wl.Flatten(
[wl.Thread(wl.Rule(wl.Range(3),[wl.Green,wl.Orange,wl.Blue])),
wl.Rule(wl.Blank(),wl.White)]
),
FrameTicks = [
[wl.Thread([range(1,4), ['A','B','C']]), wlexpr('None')],
[
wl.Thread([
wl.Range(7),
list(map(lambda r: str(r)+'k', range(1,8)))
]),
wlexpr('None')
]
]
)
);然后在一个受支持的光栅图像格式或矢量图形格式中使用C17。
wolfSession.evaluate(
wl.Export(
'',
stacked
)
)
终止会话
wolfSession.terminate()希望这能有所帮助。
https://datascience.stackexchange.com/questions/52956
复制相似问题