gpt4 book ai didi

python - 生成具有 2 个不同 y 轴和由另一个变量着色的点的图的最有效方法

转载 作者:行者123 更新时间:2023-12-01 07:15:02 31 4
gpt4 key购买 nike

我有一个包含 4 列的数据框:

  • 记录号
  • 当前
  • 容量
  • step_name:四个值a、b、c、d

我想使用 matplotlib 生成图表: required chart

图表:

  • X轴:记录数
  • Y 轴:电流和容量
  • 标记:根据 step_name 的值着色

我正在尝试此代码,但它会生成错误。

fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, figsize=(12, 8))
df.plot.scatter('record_number', 'current', c ='step_name' ,ax=ax1)
df.plot.scatter('record_number', 'capacity', c ='step_name', ax=ax2)
plt.show()

是否有一种简单的方法可以根据数据帧列的唯一值创建颜色图?您需要使用自定义函数来执行此操作吗? pandas/matplotlib 可以像 Tableau 那样计算出来吗?

这是数据框中一些数据的示例。您可以复制数据并使用 pd.read_clipboard() 生成数据框。我将尝试找出一种不同的方式来提供此信息。

record_number   current capacity    step_name
16299 13.744 72.042 c
60942 24.33 53.954 c
78204 24.332 9.313 c
37146 24.327 54.379 c
60533 24.331 51.189 c
85517 24.331 58.738 c
48782 -24.325 -51.974 d
84008 24.334 48.54 c
76814 0 0 a
85310 24.329 57.339 c
70417 -24.326 -36.958 d
4822 -24.312 -32.166 b
24782 -24.321 -51.183 d
57664 24.336 31.799 c
43586 -24.33 -16.86 d
61505 24.33 57.759 c
74553 -24.332 -64.909 d
30388 24.329 8.705 c
26213 -24.333 -60.854 d
48086 -24.33 -47.271 d
9344 24.325 25.703 c
51946 -24.33 -73.356 d
40327 11.332 74.809 c
49750 -24.329 -58.516 d
85586 24.331 59.205 c
12217 24.33 45.12 c
58459 24.329 37.172 c
4596 -24.35 -30.639 b
83811 24.327 47.208 c
67173 -24.324 -15.036 d
59496 24.329 44.181 c
71065 -24.329 -41.337 d
9260 24.33 25.135 c
61812 24.327 59.834 c
28831 -5.316 -75.849 d
58634 24.328 38.355 c
13060 24.33 50.818 c
86841 24.328 67.687 c
23905 -24.325 -45.257 d
7888 24.33 15.863 c
61286 24.331 56.279 c
69391 -24.33 -30.025 d
11508 24.326 40.329 c
56630 24.333 24.811 c
31293 24.33 14.821 c
70474 -24.326 -37.343 d
49720 -24.325 -58.313 d
53255 24.33 2.001 c
78431 24.325 10.848 c
49790 -24.32 -58.786 d
21280 -24.323 -27.517 d
70510 -24.331 -37.587 d
56135 24.329 21.465 c
82821 24.329 40.518 c
12037 24.327 43.904 c
60760 24.33 52.724 c
59509 24.328 44.269 c
32294 24.328 21.586 c
22478 -24.324 -35.613 d
38317 24.331 62.293 c
30806 24.331 11.53 c
55349 24.323 16.153 c
21376 -24.326 -28.166 d
17742 -24.327 -3.608 d
39891 21.075 72.892 c
56550 24.325 24.27 c
3110 -24.301 -20.597 b
38899 24.331 66.226 c
4841 -24.354 -32.295 b
47390 -24.329 -42.567 d
23584 -24.335 -43.087 d
10756 24.329 35.246 c
32356 24.328 22.005 c
69773 -24.332 -32.606 d
86246 24.33 63.665 c
29851 24.335 5.075 c
25986 -24.325 -59.32 d
16786 6.566 73.361 c
40008 17.998 73.525 c
50391 -24.326 -62.848 d
28543 -8.234 -75.318 d
36890 24.329 52.649 c
46688 -24.325 -37.823 d
51818 -24.323 -72.491 d
26355 -24.336 -61.813 d
56514 24.329 24.027 c
26702 -24.336 -64.158 d
35480 24.33 43.119 c
13826 24.33 55.995 c
70074 -24.324 -34.64 d
14013 24.329 57.259 c
19769 -24.327 -17.306 d
16964 5.015 73.645 c
76072 -12.77 -74.762 d
65279 -24.331 -2.236 d
6778 24.327 8.361 c
41577 -24.332 -3.283 d
5987 24.326 3.015 c
78560 24.331 11.719 c
11034 24.333 37.125 c

最佳答案

如果您只想使用 pandasmatplotlib,这应该可行:

#sorting dataframe along record_number column
df = df.sort_values('record_number')

#creating an index group for each separate set of rows with the same set_name
df['gg'] = (df['step_name'] != df['step_name'].shift()).cumsum()

#associating a color to the step_name
cols = {'a':'b', 'b':'g', 'c':'r', 'd':'c'}

#plotting
fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, sharex=True, figsize=(12, 8))
for (sn, gidx), sdf in df.groupby(['step_name', 'gg']):
ax1.plot(sdf['record_number'], sdf['current'], c=cols[sn], label=sn)
ax2.plot(sdf['record_number'], sdf['capacity'], c=cols[sn], label=sn)

#setting axis labels
plt.xlabel('record_number')
ax1.set_ylabel('current')
ax2.set_ylabel('capacity')

#making the legend, removing repeated entries
handles, labels = ax2.get_legend_handles_labels()
f_h = []
f_l = []
for h, l in zip(handles, labels):
if l not in f_l:
f_h.append(h)
f_l.append(l)
plt.legend(f_h, f_l)

plt.show()

此代码使用您的示例数据生成:

enter image description here

pandas 绘图函数可以产生不错的结果,但不太可定制。要制作复杂的绘图,通常最好使用 matplotlib 函数。

在这里,我创建了一个额外的行 df['gg'] 来用不同的索引标记具有相同 'step_name' 的每组连续行,以便我绘图时可以对它进行分组(否则结果将是每种颜色各一条线)。

此外,您需要为 'step_name' 列中的每个字母关联一种颜色(我通过定义 col 字典来实现)。请参阅here了解 matplotlib 识别的格式来指定颜色。

关于python - 生成具有 2 个不同 y 轴和由另一个变量着色的点的图的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58017856/

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