gpt4 book ai didi

python - python 中的 Tornado 图表和 p10-p90 (matplotlib)

转载 作者:行者123 更新时间:2023-12-02 15:23:54 44 4
gpt4 key购买 nike

我需要使用 Python (matplotlib) 绘制以下两件事:

  1. Tornado 图(有点总结敏感性分析)
  2. 以及各种产品列表的平均 p10 和 p90 值的比较。

我以前从未这样做过,并尝试使用 Python (matplotlib)。到目前为止没有成功。附上我正在/正在尝试绘制的内容。我用手画了它们,因为我认为用 Python 直观地解释我试图绘制的内容可能更容易。

一件重要的事情是,在 Tornado 图表中,我希望看到在图表中心划分的那条线,顶部是基本案例数字(值范围从 2000 到 5000),以及每个案例的值我的产品分别在右侧。我找到了一些非常好看的 Tornado 图表,它们看起来真的很酷,但是太长太复杂(里面有很多时髦和酷的东西,并且专门用于那个特定的图表)。

最佳答案

不幸的是,matplotlib 没有内置 Tornado 图表功能。你将不得不自己动手。这是我尝试制作类似于您的绘图的情节。

import numpy as np
from matplotlib import pyplot as plt

###############################################################################
# The data (change all of this to your actual data, this is just a mockup)
variables = [
'apple',
'juice',
'orange',
'peach',
'gum',
'stones',
'bags',
'lamps',
]

base = 3000

lows = np.array([
base - 246 / 2,
base - 1633 / 2,
base - 500 / 2,
base - 150 / 2,
base - 35 / 2,
base - 36 / 2,
base - 43 / 2,
base - 37 / 2,
])

values = np.array([
246,
1633,
500,
150,
35,
36,
43,
37,
])

###############################################################################
# The actual drawing part

# The y position for each variable
ys = range(len(values))[::-1] # top to bottom

# Plot the bars, one by one
for y, low, value in zip(ys, lows, values):
# The width of the 'low' and 'high' pieces
low_width = base - low
high_width = low + value - base

# Each bar is a "broken" horizontal bar chart
plt.broken_barh(
[(low, low_width), (base, high_width)],
(y - 0.4, 0.8),
facecolors=['white', 'white'], # Try different colors if you like
edgecolors=['black', 'black'],
linewidth=1,
)

# Display the value as text. It should be positioned in the center of
# the 'high' bar, except if there isn't any room there, then it should be
# next to bar instead.
x = base + high_width / 2
if x <= base + 50:
x = base + high_width + 50
plt.text(x, y, str(value), va='center', ha='center')

# Draw a vertical line down the middle
plt.axvline(base, color='black')

# Position the x-axis on the top, hide all the other spines (=axis lines)
axes = plt.gca() # (gca = get current axes)
axes.spines['left'].set_visible(False)
axes.spines['right'].set_visible(False)
axes.spines['bottom'].set_visible(False)
axes.xaxis.set_ticks_position('top')

# Make the y-axis display the variables
plt.yticks(ys, variables)

# Set the portion of the x- and y-axes to show
plt.xlim(base - 1000, base + 1000)
plt.ylim(-1, len(variables))

enter image description here

关于python - python 中的 Tornado 图表和 p10-p90 (matplotlib),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32132773/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com