Я получаю барплот, но не получаю scatterplot - PullRequest
0 голосов
/ 26 сентября 2018

Я на Python 2.7, с IDE Spyder, и это мои данные:

          Duration      ptno
           7432.0  X35133502100
           7432.0  X35133502100
          35255.0   T7956000304
          35255.0   T7956000304
          17502.0   T7956000304
          17502.0   T7956000304
             46.0   T7956000304
             46.0   T7956000304

Код:

import time
import pandas as pd
import matplotlib.pyplot as plt

df1 = pd.read_csv('Nissin_11.09.2018.csv')

bx = df1.plot.bar(x='ptno', y='d', rot=0)

plt.setp(bx.get_xticklabels(),rotation=30,horizontalalignment='right')

plt.show()

Я получаю хороший гистограммы, как я хотел для каждогозначение, указанное в столбцах Duration & ptno.Для справки я прилагаю файл изображения графика.

Bar plot of the dataframe

Но когда я пытаюсь получить scatter график с:

df1.plot.scatter(x='ptno', y='d')

Выдает ошибку как:

ValueError: scatter requires x column to be numeric

Как мне получить график «разброса» для моих данных ??

Как предложено @HristoИлиев Я использовал его код:

import seaborn as sns
_ = sns.stripplot(x='ptno', y='d', data=df1)

It only plot two unique values on axis

Но в нем только два уникальных значения на оси, где я хотел бы иметь все значения на оси xтак как мой гистограмма имеет значения оси X.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Один из вариантов - использовать чистый matplotlib.Вам необходимо создать массив чисел для использования в качестве оси x, т. Е. [1,2,3,4,5,...], а затем изменить метки галочек на значение столбца ptno.

Например:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df1 = pd.DataFrame({"Duration":[7432,7432,35255,35255,17502,17502,46,46],
                    "ptno":["X35", "X35", "T79", "T79", "T79", "T79", "T79", "T79"]})

dummy_x = np.arange(len(df1.ptno))

plt.scatter(dummy_x, df1.Duration)
plt.xticks(dummy_x, df1.ptno)

plt.show()

enter image description here

0 голосов
/ 26 сентября 2018

Вы не можете создавать точечные графики с нечисловыми значениями, как указано в ошибке.На точечной диаграмме положение каждой точки определяется местоположением на реальной оси значения каждой переменной.Категориальные или строковые значения, такие как T7956000304, не имеют прямого сопоставления с позицией на действительной оси.

То, что вы можете нанести на график, представляет собой серию полосовых графиков, по одному на каждое уникальное значение ptno.Это проще всего сделать с Seaborn:

import seaborn as sns
_ = sns.stripplot(x='ptno', y='d', data=df1)
...