python - Python绘图字典
问题描述
我对 python/pandas/matplotlib 的世界非常陌生,但我最近一直在使用它来创建盒须图。我很好奇如何使用特定的数据列为每张纸创建箱须图,即我有 17 张纸,每张纸上都有名为 HMB 和 DV 的列。我想在 HMB 的 Box and Whisker 上绘制 17 个数据集,在 DV 图上绘制另外 17 个数据集。以下是我到目前为止所拥有的。
我可以打开文件,并将所有工作表放入 list_dfs,但不知道从那里去哪里。我打算尝试手动对每组进行切片(正如我在来这里寻求帮助之前从下面开始的那样),但是当我将来有更多数据时,我不想手动进行。任何帮助将不胜感激!
import pandas as pd
import numpy as np
import xlrd
import matplotlib.pyplot as plt
%matplotlib inline
from pandas import ExcelWriter
from pandas import ExcelFile
from pandas import DataFrame
excel_file = 'Project File Merger.xlsm'
list_dfs = []
xls = xlrd.open_workbook(excel_file,on_demand=True)
for sheet_name in xls.sheet_names():
df = pd.read_excel(excel_file,sheet_name)
list_dfs.append(df)
d_psppm = {}
for i, sheet_name in enumerate(xls.sheet_names()):
df = pd.read_excel(excel_file,sheet_name)
d_psppm["PSPPM" + str(i)] = df.loc[:,['PSPPM']]
values_list = list(d_psppm.values())
print(values_list[:])
示例输出如下所示,包含 17 个列表条目,但每个条目的行数不同。
PSPPM
0 0.246769
1 0.599589
2 0.082420
3 0.250000
4 0.205140
5 0.850000,
PSPPM
0 0.500887
1 0.475255
2 0.472711
3 0.412953
4 0.415883
5 0.703716,...
接下来我要做的是创建一个盒子和胡须图,1 个带有 17 个盒子和胡须的图。我不知道如何让字典以值和索引作为名称进行绘图。我试图挖掘,并弄清楚如何将字典转换为列表,然后绘制列表中的每个元素,但没有运气。
谢谢您的帮助!
解决方案
我同意@Alex 的观点,将你的列形成一个新的 DataFrame,然后从中进行绘图将是一个好方法,但是,如果你要使用 dict,那么它应该看起来像这样。根据您使用的 Python 版本,字典可能是无序的,因此如果绘图上的顺序对您很重要,那么您可能希望按您想要的顺序创建字典键列表并对其进行迭代
import matplotlib.pyplot as plt
import numpy as np
#colours = []#list of colours here, if you want
#markers = []#list of markers here, if you want
fig, ax = plt.subplots()
for idx, k in enumerate(d_psppm, 1):
data = d_psppm[k]
jitter = np.random.normal(0, 0.1, data.shape[0]) + idx
ax.scatter(jitter,
data,
s=25,#size of the marker
c="r",#colour, could be from colours
alpha=0.35,#opacity, 1 being solid
marker="^",#or ref. to markers, e.g. markers[idx]
edgecolors="none"#removes black border
)
根据 Alex 的建议,您可以使用这些数据创建一个 seaborn 箱线图并覆盖一个 swarmplot 以显示数据(取决于每行有多少行,这是否可行)。
推荐阅读
- php - Symfony 4 中使用注释路由时的后备路由
- php - 使用 curl 访问 Symfony 4 控制器中的 POST 值
- r - R,Elasticsearch:错误:400 - 不同类型的映射器 [a],current_type [date],merged_type [text]
- firebase - 如何为 Firebase 事件参数重用 Google Analytics
- java - 获取 IndexOutOfBoundsException: Index: 1, Size: 1 单击行时
- typescript - 访问 Vue 中的任意插槽
- mongodb - Mongo db 3.6 和区分大小写的字段名称
- php - 如何生成目录和文件的递归列表以及每个目录和文件的超链接?
- gcc - 隐藏在 .s 汇编源代码中的字符串
- javascript - 使用数组随机分配视图 - 反应原生