Python: множественный QQ-график - PullRequest
2 голосов
/ 13 марта 2019

Я новичок и, как правило, из R. Я хочу создать QQ-Plot с несколькими строками.

У меня есть бета-распределенный набор данных. Я хочу попробовать разные параметры для бета-распределения и сравнить их в one QQ-Plot для лучшего сравнения.Если я попробую следующий код, каждый график будет одного цвета, и я получу 3 QQ-строки.Есть ли возможность объединить все эти три QQ-графика в один?
Надеюсь, вы понимаете мою проблему

import scipy.stats as stats
import numpy
x=numpy.random.beta(2, 3, size=100)
stats.probplot(x, dist=stats.beta, sparams=(2,3),plot=plt,fit=False)
stats.probplot(x, dist=stats.beta, sparams=(1,2),plot=plt,fit=False)
stats.probplot(x, dist=stats.beta, sparams=(1,4),plot=plt,fit=False)

Добрые переселения

1 Ответ

2 голосов
/ 14 марта 2019

Хорошо, поэтому stats.probplot оставил меня немного смущенным.В документации четко указано, что:

probplot генерирует график вероятности, который не следует путать с QQ или графиком PP.

Все же все источники Iможет найти состояние, что график вероятности относится либо к графику QQ, либо к графику PP.Иди к черту.

В любом случае, насколько я понимаю, то, что ты сгенерировал , является графиком QQ.

Мне также кажется, что опция fit=False из stats.probplot игнорируется, и в данные всегда добавляется линия регрессии.

В любом случае, чтобы получить то, что вы хотите, мыЯ могу явно создать экземпляр осей matplotlib и использовать метод get_lines, чтобы удалить ненужные линии регрессии и изменить цвета маркера.

import scipy.stats as stats
import numpy as np
import matplotlib.pyplot as plt

plt.style.use('seaborn')

x = numpy.random.beta(2, 3, size=100)

fig, ax = plt.subplots(1, 1, figsize=(6, 4))
stats.probplot(x, dist=stats.beta, sparams=(2,3), plot=plt, fit=False)
stats.probplot(x, dist=stats.beta, sparams=(1,2), plot=plt, fit=False)
stats.probplot(x, dist=stats.beta, sparams=(1,4), plot=plt, fit=False)

# Remove the regression lines
ax.get_lines()[1].remove()
ax.get_lines()[2].remove()
ax.get_lines()[3].remove()

# Change colour of scatter
ax.get_lines()[0].set_markerfacecolor('C0')
ax.get_lines()[1].set_markerfacecolor('C1')
ax.get_lines()[2].set_markerfacecolor('C2')

# Add on y=x line
ax.plot([0, 1], [0, 1], c='C3')

Это дало мне следующее, что, на мой взгляд, действительно на этот разВы хотели:

enter image description here

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