Эта статья участвует в "Месяце тем Python", подробнее см.Ссылка на мероприятие
Введение
python в matplotlib — очень важный и удобный графический инструмент, вы можете использовать визуализацию анализа данных matplotlib, сегодня статья о matplotlib подробно объяснит применение Pandas.
Основная картинка
Чтобы использовать matplotlib, нам нужно сослаться на него:
In [1]: import matplotlib.pyplot as plt
Предположим, мы хотим случайным образом сгенерировать данные за 365 дней, начиная с 1 января 2020 года, и тогда график должен быть записан следующим образом:
ts = pd.Series(np.random.randn(365), index=pd.date_range("1/1/2020", periods=365))
ts.plot()
Используя DF, вы можете рисовать изображения нескольких серий одновременно:
df3 = pd.DataFrame(np.random.randn(365, 4), index=ts.index, columns=list("ABCD"))
df3= df3.cumsum()
df3.plot()
Данные, используемые строками и столбцами, могут быть указаны:
df3 = pd.DataFrame(np.random.randn(365, 2), columns=["B", "C"]).cumsum()
df3["A"] = pd.Series(list(range(len(df))))
df3.plot(x="A", y="B");
другие изображения
plot() поддерживает множество типов изображений, включая гистограмму, гистограмму, прямоугольник, плотность, площадь, разброс, шестигранник, круговую диаграмму и т. д. Давайте рассмотрим пример, чтобы увидеть, как его использовать.
bar
df.iloc[5].plot(kind="bar");
бар с несколькими столбцами:
df2 = pd.DataFrame(np.random.rand(10, 4), columns=["a", "b", "c", "d"])
df2.plot.bar();
stacked bar
df2.plot.bar(stacked=True);
barh
barh представляет горизонтальную гистограмму:
df2.plot.barh(stacked=True);
Histograms
df2.plot.hist(alpha=0.5);
box
df.plot.box();
Коробка может настроить цвет:
color = {
....: "boxes": "DarkGreen",
....: "whiskers": "DarkOrange",
....: "medians": "DarkBlue",
....: "caps": "Gray",
....: }
df.plot.box(color=color, sym="r+");
Можно превратить в альбомную:
df.plot.box(vert=False);
В дополнение к блокам вы также можете использовать DataFrame.boxplot для рисования блок-графиков:
In [42]: df = pd.DataFrame(np.random.rand(10, 5))
In [44]: bp = df.boxplot()
boxplot можно сгруппировать по:
df = pd.DataFrame(np.random.rand(10, 2), columns=["Col1", "Col2"])
df
Out[90]:
Col1 Col2
0 0.047633 0.150047
1 0.296385 0.212826
2 0.562141 0.136243
3 0.997786 0.224560
4 0.585457 0.178914
5 0.551201 0.867102
6 0.740142 0.003872
7 0.959130 0.581506
8 0.114489 0.534242
9 0.042882 0.314845
df.boxplot()
Теперь добавьте столбец в df:
df["X"] = pd.Series(["A", "A", "A", "A", "A", "B", "B", "B", "B", "B"])
df
Out[92]:
Col1 Col2 X
0 0.047633 0.150047 A
1 0.296385 0.212826 A
2 0.562141 0.136243 A
3 0.997786 0.224560 A
4 0.585457 0.178914 A
5 0.551201 0.867102 B
6 0.740142 0.003872 B
7 0.959130 0.581506 B
8 0.114489 0.534242 B
9 0.042882 0.314845 B
bp = df.boxplot(by="X")
Area
Используйте Series.plot.area() или DataFrame.plot.area() для рисования площадных графиков.
In [60]: df = pd.DataFrame(np.random.rand(10, 4), columns=["a", "b", "c", "d"])
In [61]: df.plot.area();
Если вы не хотите складывать, вы можете указать stacked=False
In [62]: df.plot.area(stacked=False);
Scatter
DataFrame.plot.scatter() может создавать точечные графики.
In [63]: df = pd.DataFrame(np.random.rand(50, 4), columns=["a", "b", "c", "d"])
In [64]: df.plot.scatter(x="a", y="b");
Точечные диаграммы также могут иметь третью ось:
df.plot.scatter(x="a", y="b", c="c", s=50);
Третий параметр можно изменить на размер скаттера:
df.plot.scatter(x="a", y="b", s=df["c"] * 200);
Hexagonal bin
Используйте DataFrame.plot.hexbin() для создания сотового графика:
In [69]: df = pd.DataFrame(np.random.randn(1000, 2), columns=["a", "b"])
In [70]: df["b"] = df["b"] + np.arange(1000)
In [71]: df.plot.hexbin(x="a", y="b", gridsize=25);
По умолчанию глубина цвета представляет собой количество элементов в (x, y). Различные методы агрегирования могут быть указаны с помощью функции reduce_C_: напримерmean, max, sum, std.
In [72]: df = pd.DataFrame(np.random.randn(1000, 2), columns=["a", "b"])
In [73]: df["b"] = df["b"] = df["b"] + np.arange(1000)
In [74]: df["z"] = np.random.uniform(0, 3, 1000)
In [75]: df.plot.hexbin(x="a", y="b", C="z", reduce_C_function=np.max, gridsize=25);
Pie
Используйте DataFrame.plot.pie() или Series.plot.pie() для построения круговой диаграммы:
In [76]: series = pd.Series(3 * np.random.rand(4), index=["a", "b", "c", "d"], name="series")
In [77]: series.plot.pie(figsize=(6, 6));
Вы можете построить график по количеству столбцов:
In [78]: df = pd.DataFrame(
....: 3 * np.random.rand(4, 2), index=["a", "b", "c", "d"], columns=["x", "y"]
....: )
....:
In [79]: df.plot.pie(subplots=True, figsize=(8, 4));
Более персонализированный контент:
In [80]: series.plot.pie(
....: labels=["AA", "BB", "CC", "DD"],
....: colors=["r", "g", "b", "c"],
....: autopct="%.2f",
....: fontsize=20,
....: figsize=(6, 6),
....: );
Если входящее значение в сумме не равно 1, будет нарисован зонтик:
In [81]: series = pd.Series([0.1] * 4, index=["a", "b", "c", "d"], name="series2")
In [82]: series.plot.pie(figsize=(6, 6));
Обработка данных NaN в Paint
Вот как обрабатываются данные NaN в режиме рисования по умолчанию:
| Метод рисования | Как обращаться с NaN |
|---|---|
| Line | Leave gaps at NaNs |
| Line (stacked) | Заполните 0 |
| Bar | Заполните 0 |
| Scatter | Drop NaNs |
| Histogram | Drop NaNs (column-wise) |
| Box | Drop NaNs (column-wise) |
| Area | Заполните 0 |
| KDE | Drop NaNs (column-wise) |
| Hexbin | Drop NaNs |
| Pie | Заполните 0 |
Другие инструменты рисования
Матрица рассеяния
Вы можете использовать scatter_matrix в pandas.plotting, чтобы нарисовать матрицу рассеяния:
In [83]: from pandas.plotting import scatter_matrix
In [84]: df = pd.DataFrame(np.random.randn(1000, 4), columns=["a", "b", "c", "d"])
In [85]: scatter_matrix(df, alpha=0.2, figsize=(6, 6), diagonal="kde");
График плотности
Используйте Series.plot.kde() и DataFrame.plot.kde() для построения графиков плотности:
In [86]: ser = pd.Series(np.random.randn(1000))
In [87]: ser.plot.kde();
Кривые Эндрюса
Кривые Эндрюса позволяют отображать многомерные данные в виде большого количества кривых, созданных с использованием свойств образцов в качестве коэффициентов ряда Фурье.Группирование данных можно визуализировать, окрашивая эти кривые по-разному для каждого класса. Кривые образцов, принадлежащих к одному и тому же классу, обычно располагаются ближе друг к другу и образуют более крупные структуры.
In [88]: from pandas.plotting import andrews_curves
In [89]: data = pd.read_csv("data/iris.data")
In [90]: plt.figure();
In [91]: andrews_curves(data, "Name");
Параллельные координаты
Параллельные координаты - это технология рисования для рисования многоданных. Параллельные координаты позволяют людям просматривать кластеры в данных и интуитивно оценить другую статистику. Используйте параллельную точку координаты, чтобы представлять сегмент линии подключения. Каждая вертикальная линия представляет атрибут. Набор подключенных сегментов линии представляют точку данных. Точки, которые склонны собираться, появится ближе.
In [92]: from pandas.plotting import parallel_coordinates
In [93]: data = pd.read_csv("data/iris.data")
In [94]: plt.figure();
In [95]: parallel_coordinates(data, "Name");
запаздывающий сюжет
График с запаздыванием — это точечный график, построенный с использованием временного ряда и соответствующего ряда с запаздыванием. Может использоваться для наблюдения за автокорреляцией.
In [96]: from pandas.plotting import lag_plot
In [97]: plt.figure();
In [98]: spacing = np.linspace(-99 * np.pi, 99 * np.pi, num=1000)
In [99]: data = pd.Series(0.1 * np.random.rand(1000) + 0.9 * np.sin(spacing))
In [100]: lag_plot(data);
График автокорреляции
Графики автокорреляции часто используются для изучения случайности во временных рядах. График автокорреляции представляет собой плоский двухмерный график драпировки координат. Абсцисса представляет собой порядок задержки, а ордината представляет собой коэффициент автокорреляции.
In [101]: from pandas.plotting import autocorrelation_plot
In [102]: plt.figure();
In [103]: spacing = np.linspace(-9 * np.pi, 9 * np.pi, num=1000)
In [104]: data = pd.Series(0.7 * np.random.rand(1000) + 0.3 * np.sin(spacing))
In [105]: autocorrelation_plot(data);
Bootstrap plot
График начальной загрузки используется для визуальной оценки неопределенности в статистике, такой как среднее значение, медиана, средний диапазон и т. д. Выберите случайное подмножество указанного размера из набора данных, вычислите соответствующую статистику для этого подмножества, повторите указанное количество раз. Полученные графики и гистограммы составляют бутстреп-график.
In [106]: from pandas.plotting import bootstrap_plot
In [107]: data = pd.Series(np.random.rand(1000))
In [108]: bootstrap_plot(data, size=50, samples=500, color="grey");
RadViz
Он представляет собой алгоритм минимизации натяжения пружины. Это характеризационный набор данных, сопоставленный с точкой в двумерном объектном пространстве единичной окружности, он определяется положением точки на характерной точке на основе. Примеры в центр круга, круг будет двигаться к функциям в этом примере положение (соответствующее нормализованному значению Примера) "тянуть" экземпляр.
In [109]: from pandas.plotting import radviz
In [110]: data = pd.read_csv("data/iris.data")
In [111]: plt.figure();
In [112]: radviz(data, "Name");
Формат изображения
После версии 1.5 matplotlib предоставляется множество настроек рисования по умолчанию, которые можно установить с помощью matplotlib.style.use(my_plot_style).
Все доступные типы стилей могут быть перечислены с помощью matplotlib.style.available:
import matplotlib as plt;
plt.style.available
Out[128]:
['seaborn-dark',
'seaborn-darkgrid',
'seaborn-ticks',
'fivethirtyeight',
'seaborn-whitegrid',
'classic',
'_classic_test',
'fast',
'seaborn-talk',
'seaborn-dark-palette',
'seaborn-bright',
'seaborn-pastel',
'grayscale',
'seaborn-notebook',
'ggplot',
'seaborn-colorblind',
'seaborn-muted',
'seaborn',
'Solarize_Light2',
'seaborn-paper',
'bmh',
'seaborn-white',
'dark_background',
'seaborn-poster',
'seaborn-deep']
убрать маленькие значки
По умолчанию графики отображаются со значком, представляющим тип столбца, который можно отключить с помощью legend=False:
In [115]: df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list("ABCD"))
In [116]: df = df.cumsum()
In [117]: df.plot(legend=False);
Установите имя ярлыка
In [118]: df.plot();
In [119]: df.plot(xlabel="new x", ylabel="new y");
Увеличить
Если данные оси X или оси Y на чертеже слишком отличаются, это может привести к тому, что отображение изображения будет недружественным, и часть с малым значением в принципе не может быть отображена.Вы можете передать logy=True, чтобы масштабировать Y -ось:
In [120]: ts = pd.Series(np.random.randn(1000), index=pd.date_range("1/1/2000", periods=1000))
In [121]: ts = np.exp(ts.cumsum())
In [122]: ts.plot(logy=True);
Несколько осей Y
Используйте second_y=True для построения нескольких данных по оси Y:
In [125]: plt.figure();
In [126]: ax = df.plot(secondary_y=["A", "B"])
In [127]: ax.set_ylabel("CD scale");
In [128]: ax.right_ax.set_ylabel("AB scale");
Слово right будет добавлено к маленькому значку по умолчанию, если вы хотите удалить его, вы можете установить mark_right=False:
In [129]: plt.figure();
In [130]: df.plot(secondary_y=["A", "B"], mark_right=False);
Корректировка текста координат
При использовании времени в качестве координат, поскольку время слишком велико, значение координат оси X не отображается полностью, вы можете использовать x_compat=True для настройки:
In [133]: plt.figure();
In [134]: df["A"].plot(x_compat=True);
Если у вас есть несколько изображений для настройки, вы можете использовать с:
In [135]: plt.figure();
In [136]: with pd.plotting.plot_params.use("x_compat", True):
.....: df["A"].plot(color="r")
.....: df["B"].plot(color="g")
.....: df["C"].plot(color="b")
.....:
подграф
При рисовании DF вы можете разделить несколько рядов и отобразить их в виде подграфов:
In [137]: df.plot(subplots=True, figsize=(6, 6));
Компоновку подграфа можно изменить:
df.plot(subplots=True, layout=(2, 3), figsize=(6, 6), sharex=False);
Вышеприведенное эквивалентно:
In [139]: df.plot(subplots=True, layout=(2, -1), figsize=(6, 6), sharex=False);
Более сложный пример:
In [140]: fig, axes = plt.subplots(4, 4, figsize=(9, 9))
In [141]: plt.subplots_adjust(wspace=0.5, hspace=0.5)
In [142]: target1 = [axes[0][0], axes[1][1], axes[2][2], axes[3][3]]
In [143]: target2 = [axes[3][0], axes[2][1], axes[1][2], axes[0][3]]
In [144]: df.plot(subplots=True, ax=target1, legend=False, sharex=False, sharey=False);
In [145]: (-df).plot(subplots=True, ax=target2, legend=False, sharex=False, sharey=False);
стол для рисования
Если table = True, табличные данные могут отображаться вместе непосредственно на чертежах:
In [165]: fig, ax = plt.subplots(1, 1, figsize=(7, 6.5))
In [166]: df = pd.DataFrame(np.random.rand(5, 3), columns=["a", "b", "c"])
In [167]: ax.xaxis.tick_top() # Display x-axis ticks on top.
In [168]: df.plot(table=True, ax=ax)
fig
Таблицу также можно отобразить поверх картинки:
In [172]: from pandas.plotting import table
In [173]: fig, ax = plt.subplots(1, 1)
In [174]: table(ax, np.round(df.describe(), 2), loc="upper right", colWidths=[0.2, 0.2, 0.2]);
In [175]: df.plot(ax=ax, ylim=(0, 2), legend=None);
Использование цветовых карт
Если на оси Y слишком много данных, использование цвета линии по умолчанию может быть трудно различимым. В этом случае можно передать цветовую карту.
In [176]: df = pd.DataFrame(np.random.randn(1000, 10), index=ts.index)
In [177]: df = df.cumsum()
In [178]: plt.figure();
In [179]: df.plot(colormap="cubehelix");
Эта статья была включена вwoohoo.floydpress.com/09-python-afraid…
Самая популярная интерпретация, самая глубокая галантерея, самые краткие уроки и множество трюков, о которых вы не знаете, ждут вас!