Гистограмма Matplotlib с нечисловыми данными - PullRequest
1 голос
/ 02 июля 2019

Невозможно построить гистограмму в Matplotlib с нечисловыми данными.

A = na, R, O, na, na, O, R ...

A - это кадр данных, которыйпринимает 3 различных значения: na, R, O

Я пытаюсь:

plt.hist(A, bins=3, color='#37777D')

Ожидается что-то подобное Результат

Работает с числовымданные, но с не числовыми данными я получаю эту ошибку:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-44-60369a6f9af4> in <module>
      1 A = dataset2.iloc[:, 2 - 1].head(30)
----> 2 plt.hist(A, bins=3, histtype='bar', color='#37777D')

C:\Anaconda\lib\site-packages\matplotlib\pyplot.py in hist(x, bins, range, density, weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, stacked, normed, data, **kwargs)
   2657         align=align, orientation=orientation, rwidth=rwidth, log=log,
   2658         color=color, label=label, stacked=stacked, normed=normed,
-> 2659         **({"data": data} if data is not None else {}), **kwargs)
   2660 
   2661 

C:\Anaconda\lib\site-packages\matplotlib\__init__.py in inner(ax, data, *args, **kwargs)
   1808                         "the Matplotlib list!)" % (label_namer, func.__name__),
   1809                         RuntimeWarning, stacklevel=2)
-> 1810             return func(ax, *args, **kwargs)
   1811 
   1812         inner.__doc__ = _add_data_doc(inner.__doc__,

C:\Anaconda\lib\site-packages\matplotlib\axes\_axes.py in hist(self, x, bins, range, density, weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, stacked, normed, **kwargs)
   6563                     "color kwarg must have one color per data set. %d data "
   6564                     "sets and %d colors were provided" % (nx, len(color)))
-> 6565                 raise ValueError(error_message)
   6566 
   6567         # If bins are not specified either explicitly or via range,

ValueError: color kwarg must have one color per data set. 30 data sets and 1 colors were provided

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Я думаю, что вам нужна гистограмма вместо гистограммы. Более того, неясно, каковы ваши ценности. Учитывая, что они являются строками (основаны на графике), вам нужно сначала посчитать их частоты, используя, например, модуль Counter. Затем вы можете отобразить частоты и назначить названия клавиш в качестве меток.

from collections import Counter
from matplotlib import pyplot as plt

A = ['na', 'R', 'O', 'na', 'na', 'R']

freqs = Counter(A)

xvals = range(len(freqs.values()))
plt.bar(xvals, freqs.values() , color='#37777D')
plt.xticks(xvals, freqs.keys())
plt.show() 

enter image description here

0 голосов
/ 02 июля 2019

Это не воспроизводимо. Но если мы создадим фрейм данных и запустим следующий код

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

df = pd.DataFrame(np.random.choice(["na", "O", "A"], size=10))

plt.hist(df.values, histtype='bar', bins=3)

plt.show()

enter image description here

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

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

df = pd.DataFrame(np.random.choice(["na", "O", "A"], size=10))

counts = df[0].value_counts()
plt.bar(counts.index, counts.values)

plt.show()

enter image description here

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