Ставим несколько участков рядом - PullRequest
0 голосов
/ 30 мая 2020

У меня есть 9 гистограмм, сделанных с помощью matplotlib.pyplot.

Есть ли простой способ «прикрепить» их друг к другу, чтобы каждая новая гистограмма не начиналась с новой строки?

Data: data

Код предоставления:

for column in data:
   plt.figure(figsize=(5,5))

   a1 = data[(data['Outcome'] == 0)][column]
   a2 = data[(data['Outcome'] == 1)][column]

   ax = np.linspace(0, data[column].max(), 50)

   plt.hist(a1, ax, color='blue', alpha=0.6, label='Have Diabetes = NO')
   plt.hist(a2, ax, color='yellow', alpha=0.6, label='Have Diabetes = YES')

   plt.title(f'Histogram for {column}')
   plt.xlabel(f'{column}')
   plt.ylabel('number of people')

   plt.grid(True)
   leg = plt.legend(loc='upper right', frameon=True)

Я хочу примерно следующее:

enter image description here

На самом деле я не знаю нужно, чтобы оно было 3x3, а не go в столбце. Является ли это возможным? Спасибо за любую возможную помощь.

Ответы [ 2 ]

1 голос
/ 30 мая 2020

Вам нужно назначить сюжеты на ax, а также он будет set_title et c:

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
data = pd.read_csv("datasets_228_482_diabetes.csv")

fig,ax = plt.subplots(3,3,figsize=(9,9))
ax = ax.flatten()

for i,column in enumerate(data.columns):
    a1 = data[(data['Outcome'] == 0)][column]
    a2 = data[(data['Outcome'] == 1)][column]

    ax[i].hist(a1, color='blue', alpha=0.6, label='Have Diabetes = NO')
    ax[i].hist(a2, color='yellow', alpha=0.6, label='Have Diabetes = YES')

    ax[i].set_title('Histogram for '+column)
    ax[i].set_xlabel(f'{column}')
    ax[i].set_ylabel('number of people')

    ax[i].legend(loc='upper right',frameon=True,markerscale=7,fontsize=7)

fig.tight_layout()

enter image description here

Как вы можете видите, результат последнего столбца довольно бесполезен, поэтому, если вы не нанесете его на график, вы также можете рассмотреть возможность использования seaborn:

g = sns.FacetGrid(data=data.melt(id_vars="Outcome"),
                  col="variable",hue="Outcome",sharex=False,sharey=False,
                  col_wrap=4,palette=['blue','yellow'])
g = g.map(plt.hist,"value",alpha=0.7)

enter image description here

1 голос
/ 30 мая 2020

Я думаю, вам следует использовать axes, а не pyplot:

 from matplotlib import pyplot as plt
 fig, axes = plt.subplots(3,3, figsize=(9,9))

 for d, ax in zip(data_list, axes.ravel()):
      ax.hist(d)   # or something similar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...