Многоуровневая сгруппированная ось X в Python - PullRequest
2 голосов
/ 06 марта 2019

У меня есть набор данных, как показано ниже.Я хотел бы построить график изменчивости, как в JMP с сгруппированной осью X с несколькими категориями и легендой по строке.Пример набора данных и графика из JMP приведены ниже.Есть ли Pythonic решение для построения этого типа данных?Я ищу решение, использующее любую из библиотек построения графиков python - bokeh, matplotlib, seaborn и т. Д.

Обратите внимание, что нижняя X-категория должна отображаться горизонтально, а подкатегории должны быть вертикальными.Если бы этот график мог быть гибким в обработке различных категорий оси X (то есть, если в будущем будет добавлено больше), это было бы здорово.

Это репост, поскольку он немного отличается от моего предыдущего поста о графике сгруппированной оси X в Python.

Набор данных и пример JMP-графика ниже:

Пример набора данных

Пример VarPlot - JMP

1 Ответ

0 голосов
/ 06 марта 2019

Вот как я создал эту сгруппированную гистограмму, используя библиотеку черчения Altair . Есть 2 ограничения

  1. Столбец TEST_NAME никогда не бывает одинаковым от одной строки к другой, поэтому он не отображается на графике
  2. Столбец Date всегда одинаков для каждой строки, поэтому он не отображается на графике

Импорт

import altair as alt
import pandas as pd

Создать пример данных

data = """
Name,Numbers,Date,TEST_NAME,Label,Data
ABC,404,201905,101,MEDIAN,0.745313
ABC,404,201905,102,NINETYFIVEPERC,1.03828
ABC,406,201905,103,MEDIAN,0.698438
ABC,406,201905,104,NINETYFIVEPERC,0.874219
ABC,408,201905,105,MEDIAN,0.721785
DEF,408,201905,106,NINETYFIVEPERC,1.05
DEF,411,201905,107,MEDIAN,0.7277345
DEF,411,201905,108,NINETYFIVEPERC,1.0083995
DEF,414,201905,109,MEDIAN,0.757031
DEF,414,201905,110,NINETYFIVEPERC,1.05
GHI,415,201905,111,MEDIAN,0.733594
GHI,415,201905,112,NINETYFIVEPERC,0.932813
GHI,441,201905,113,MEDIAN,0.745313
GHI,441,201905,114,NINETYFIVEPERC,0.96738305
GHI,498,201905,115,MEDIAN,0.721875
"""
df = pd.read_csv(pd.compat.StringIO(data), sep=',')

Показать данные

print(df)

   Name  Numbers    Date  TEST_NAME           Label      Data
0   ABC      404  201905        101          MEDIAN  0.745313
1   ABC      404  201905        102  NINETYFIVEPERC  1.038280
2   ABC      406  201905        103          MEDIAN  0.698438
3   ABC      406  201905        104  NINETYFIVEPERC  0.874219
4   ABC      408  201905        105          MEDIAN  0.721785
5   DEF      408  201905        106  NINETYFIVEPERC  1.050000
6   DEF      411  201905        107          MEDIAN  0.727735
7   DEF      411  201905        108  NINETYFIVEPERC  1.008400
8   DEF      414  201905        109          MEDIAN  0.757031
9   DEF      414  201905        110  NINETYFIVEPERC  1.050000
10  GHI      415  201905        111          MEDIAN  0.733594
11  GHI      415  201905        112  NINETYFIVEPERC  0.932813
12  GHI      441  201905        113          MEDIAN  0.745313
13  GHI      441  201905        114  NINETYFIVEPERC  0.967383
14  GHI      498  201905        115          MEDIAN  0.721875

Создание сгруппированных гистограмм

alt.Chart(df).mark_circle(size=100).encode(
    x='Numbers:O',
    y='Data',
    color='Label',
    column='Name'
)

Вот результирующий сюжет Chart

...