параллельный участок панды с различными диапазонами осей - PullRequest
0 голосов
/ 24 октября 2018

Я должен построить параллельный график некоторого набора данных с различными диапазонами.Когда я гуглил, я нашел один прекрасный пример javascript на этом веб-сайте .

У меня есть пример набора данных для теста, и я хотел бы получить параллельный график, имеющий yxis-ticks и различные диапазоны якс что-то похожее на это изображение:

Пока я сделал это:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas.plotting import parallel_coordinates
np.random.seed(100)

%matplotlib inline

df = pd.DataFrame({'calcium': np.random.randint(0,7,5),
                  'calories': np.random.randint(200,900,5),
                 'fiber': np.random.randint(10,75,5),
                'potassium': np.random.randint(0,20,5)
                  })
df = df.T
df['name'] = df.index

df.reset_index(drop=True)

parallel_coordinates(df,'name')

вывод таков:

Как мы видим, нижние кривые крайне неразличимы.Я бы хотел это исправить.Я гуглил и пытался найти, как изменить отметки вертикальной оси Y и изменить диапазоны (нормализовать).

Помощь будет оценена.Это прекрасный сюжет, спасибо тем, кто на планете Земля сумел представить этот прекрасный сюжет на питоне !!

Ссылки по теме:
http://bl.ocks.org/syntagmatic/raw/3150059/
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.plotting.parallel_coordinates.html
https://pandas.pydata.org/pandas-docs/stable/visualization.html
Как построить параллельные координаты на пандах DataFrame с некоторыми столбцами, содержащими строки?

Обновление

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas.plotting import parallel_coordinates
np.random.seed(100)

plt.style.use('ggplot')
%matplotlib inline

df = pd.DataFrame({'calcium': np.random.randint(0,7,5),
                   'calories': np.random.randint(200,900,5),
                   'fiber': np.random.randint(10,75,5),
                   'potassium': np.random.randint(0,20,5),
                   'name': ['apple','banana','orange','mango','watermelon']

                  })
ax = parallel_coordinates(df,'name')
ax.grid(True)
ax.set_yscale('log')

enter image description here

По-прежнему не удается поставить метки на средних осях.

1 Ответ

0 голосов
/ 24 октября 2018

Это решение, которое поможет улучшить читаемость, используя ломаные оси Y.Я украл большую часть этого кода из здесь .

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(100)

%matplotlib inline

df = pd.DataFrame({'calcium': np.random.randint(0,7,5),
              'calories': np.random.randint(200,900,5),
             'fiber': np.random.randint(10,75,5),
            'potassium': np.random.randint(0,20,5)
              })

f, (ax, ax2) = plt.subplots(2, 1, sharex=True)

#plot the same data on both axes
ax.plot(df)
ax2.plot(df)

# zoom-in / limit the view to different portions of the data
ax.set_ylim(250, 800)  # outliers only
ax2.set_ylim(0, 75)  # most of the data

# hide the spines between ax and ax2
ax.spines['bottom'].set_visible(False)
ax2.spines['top'].set_visible(False)
ax.xaxis.tick_top()
ax.tick_params(labeltop='off')  # don't put tick labels at the top
ax2.xaxis.tick_bottom()

d = .015  # how big to make the diagonal lines in axes coordinates
kwargs = dict(transform=ax.transAxes, color='k', clip_on=False)
ax.plot((-d, +d), (-d, +d), **kwargs)        # top-left diagonal
ax.plot((1 - d, 1 + d), (-d, +d), **kwargs)  # top-right diagonal

kwargs.update(transform=ax2.transAxes)  # switch to the bottom axes
ax2.plot((-d, +d), (1 - d, 1 + d), **kwargs)  # bottom-left diagonal
ax2.plot((1 - d, 1 + d), (1 - d, 1 + d), **kwargs)  # bottom-right diagonal


f.subplots_adjust(left=0.1, right=1.6, 
              bottom=0.1, top = 0.9, 
              hspace=0.3) # space between the two sections
f.legend(df.columns)

plt.show()

, который создает график, который выглядит следующим образом: enter image description here

Я все ещедумаю, что кальциевую линию сложно интерпретировать, но вы можете взорвать изображение или снова разбить ось y, если график достаточно прост, чтобы разбить его на куски.

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