Словарь черчения Python - PullRequest
0 голосов
/ 26 ноября 2018

Я ОЧЕНЬ новичок в мире python / pandas / matplotlib, но недавно я использовал его для создания коробок и усов.Мне было любопытно, как создать прямоугольник с усами для каждого листа, используя определенный столбец данных, т.е. у меня есть 17 листов, и у меня есть столбцы с именами HMB и DV на каждом листе.Я хочу нанести 17 наборов данных на Box и Whisker для HMB и еще 17 наборов данных на DV-график.Ниже приведено то, что у меня есть.

Я могу открыть файл и получить все листы в 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 коробками и усами.Я не уверен, как получить словарь для построения графиков со значениями и индексами в качестве имени.Я попытался выкопать и выяснить, как преобразовать словарь в список, а затем построить каждый элемент в списке, но безуспешно.

Спасибо за помощь!

1 Ответ

0 голосов
/ 27 ноября 2018

Я согласен с @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
              )

В соответствии с предложением Алекса вы можете использовать данные для создания коробчатого графика морского волка и наложения Swarmplot для отображения данных (зависит от того, сколько строк в каждой есть, целесообразно ли это).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...