matplotlib не отображает данные разброса в boxplot - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь следовать титаническому примеру, показанному здесь .Вот мой код до сих пор

    cat_df = DataFrame({"Data": data, "DOW": days_of_week})
    axes = cat_df.boxplot(column="Data", by="DOW")
    axes.set_title("DOW vs Data")
    axes.set_xlabel("DOW")
    axes.set_ylabel("Data")
    for day in ["Fri", "Mon", "Thu", "Tue", "Wed"]:
        y = cat_df.loc[cat_df["DOW"] == day, "Data"]
        x = np.repeat(day, len(y))
        axes.scatter(x, y, color='r', alpha=0.3)
    plt.suptitle('')
    plt.show()

Этот код создает следующее изображение enter image description here, поскольку вы можете видеть, что проблема в том, что последнее поле не содержит точек разброса данных,Я попытался изменить порядок, в котором рисуются графики (т. Е. Сначала рисуются данные разброса, а затем прямоугольники), но это, похоже, не дает никакого эффекта.

1 Ответ

1 голос
/ 12 марта 2019

Проблема в том, что категориальные оси, созданные pandas и matplotlib, несовместимы. Панды упорядочивают категории по индексам 1,2,..., а matplotlib использует 0,1,.... Лучшее решение состоит в том, чтобы использовать только один инструмент для построения графиков (либо все панды, либо все matplotlib), но если вам нужно смешать и то, и другое, то вы должны соответственно отрегулировать координаты оси x:

tips = sns.load_dataset('tips')

axes = tips.boxplot(column="tip", by="day")
axes.set_title("DOW vs Data")
axes.set_xlabel("DOW")
axes.set_ylabel("Data")

for i,day in enumerate(["Thur", "Fri", "Sat", "Sun"]):
    y = tips.loc[tips["day"] == day, "tip"]
    x = np.repeat(i+1, len(y))  # adjust the x data so that Thur will correspond to coordinate 1, Fri to 2, etc
    axes.scatter(x, y, color='r', alpha=0.3)

enter image description here

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