Zen*_*ega 4 python matplotlib pandas seaborn
我有一个如下表,它存储在名为“data”的 pandas 数据框中。
| 第1栏 | 设备1 | 事件发生率% | % 事件距离 | % 非事件分布 | % 总分布 | 
|---|---|---|---|---|---|
| 0 | 安卓 | 3.08 | 27.3 | 32.96 | 32.75 | 
| 1 | Chrome操作系统 | 4.05 | 0.47 | 0.42 | 0.43 | 
| 2 | 铬操作系统 | 9.95 | 0.23 | 0.08 | 0.09 | 
| 3 | Linux | 2.27 | 0.05 | 0.09 | 0.09 | 
| 4 | 苹果系统 | 6.43 | 4.39 | 2.45 | 2.52 | 
| 5 | 其他的 | 2.64 | 7.41 | 10.48 | 10.36 | 
| 6 | 视窗 | 5.7 | 15.89 | 10.08 | 10.3 | 
| 7 | iOS系统 | 3.76 | 44.26 | 43.44 | 43.47 | 
我正在尝试创建一个所需的seaborn/matplot图表,如下所示,它是在Excel中创建的。
这是我的Python代码:
feature = 'Device1'
fig, ax1 = plt.subplots(figsize=(10,6))
color = 'tab:blue'
title = 'Event rate by ' + feature
ax1.set_title(title, fontsize=14)
ax1.set_xlabel(feature, fontsize=14)
ax2 = sns.barplot(x=feature, y='% non-event dist', data = data, color=color)
ax2 = sns.barplot(x=feature, y='% event dist', data = data, color='orange')
plt.xticks(rotation=45)
ax1.set_ylabel('% Dist', fontsize=14, color=color)
ax1.tick_params(axis='y')
ax2 = ax1.twinx()
color = 'tab:red'
ax2.set_ylabel('Event Rate %', fontsize=14, color=color)
ax2 = sns.lineplot(x=feature, y='event_rate %', data = data, sort=False, color=color)
ax2.tick_params(axis='y', color=color)
handles1, labels1 = ax1.get_legend_handles_labels()
handles2, labels2 = ax2.get_legend_handles_labels()
handles = handles1 + handles2
labels = labels1 + labels2
plt.legend(handles,labels)
plt.show()
这是我得到的
问题:
如何使我的seaborn 绘图看起来与我的Excel 绘图相似?谢谢。
.stack.iloc[:, :-1]选择所有行,但排除'% total dist'行。import pandas as pd
import seaborn as sns
# create dataframe
data = {'Device1': ['Android', 'Chrome OS', 'Chromium OS', 'Linux', 'Mac OS', 'Others', 'Windows', 'iOS'],
        'event_rate %': [3.08, 4.05, 9.95, 2.27, 6.43, 2.64, 5.7, 3.76],
        '% event dist': [27.3, 0.47, 0.23, 0.05, 4.39, 7.41, 15.89, 44.26],
        '% non-event dist': [32.96, 0.42, 0.08, 0.09, 2.45, 10.48, 10.08, 43.44],
        '% total dist': [32.75, 0.43, 0.09, 0.09, 2.52, 10.36, 10.3, 43.47]}
df = pd.DataFrame(data)
# display(df.head())
       Device1  event_rate %  % event dist  % non-event dist  % total dist
0      Android          3.08         27.30             32.96         32.75
1    Chrome OS          4.05          0.47              0.42          0.43
2  Chromium OS          9.95          0.23              0.08          0.09
3        Linux          2.27          0.05              0.09          0.09
4       Mac OS          6.43          4.39              2.45          2.52
# convert from a wide to long format
dfl = df.iloc[:, :-1].set_index('Device1').stack().reset_index(name='Values').rename({'level_1': 'Type'}, axis=1)
# select the desired data
dist = dfl[dfl.Type.str.contains('dist')]
rate = dfl[dfl.Type.str.contains('rate')]
# display(dist.head())
       Device1              Type  Values
1      Android      % event dist   27.30
2      Android  % non-event dist   32.96
4    Chrome OS      % event dist    0.47
5    Chrome OS  % non-event dist    0.42
7  Chromium OS      % event dist    0.23
# display(rate.head())
        Device1          Type  Values
0       Android  event_rate %    3.08
3     Chrome OS  event_rate %    4.05
6   Chromium OS  event_rate %    9.95
9         Linux  event_rate %    2.27
12       Mac OS  event_rate %    6.43
bbox_to_anchor=(0.8, -0.25)移动图例。# convert from a wide to long format
dfl = df.iloc[:, :-1].set_index('Device1').stack().reset_index(name='Values').rename({'level_1': 'Type'}, axis=1)
# select the desired data
dist = dfl[dfl.Type.str.contains('dist')]
rate = dfl[dfl.Type.str.contains('rate')]
# display(dist.head())
       Device1              Type  Values
1      Android      % event dist   27.30
2      Android  % non-event dist   32.96
4    Chrome OS      % event dist    0.47
5    Chrome OS  % non-event dist    0.42
7  Chromium OS      % event dist    0.23
# display(rate.head())
        Device1          Type  Values
0       Android  event_rate %    3.08
3     Chrome OS  event_rate %    4.05
6   Chromium OS  event_rate %    9.95
9         Linux  event_rate %    2.27
12       Mac OS  event_rate %    6.43
plt.legend(...)并l1.remove()| 归档时间: | 
 | 
| 查看次数: | 1290 次 | 
| 最近记录: |