【问题标题】:Fitted distribution is cut when creating several plots创建多个图时,拟合分布被剪切
【发布时间】:2018-05-09 12:47:33
【问题描述】:

我正在尝试绘制出版物正态分布的 3 个数字,但我只得到一个好的数字(英国)。其余两个(美国和日本)的正态曲线不完整。

我将曲线拟合到直方图,因此您可以说每个图需要包含两个图,即直方图和高斯分布。

请查看我的部分代码并告诉我如何解决此问题。 我非常愿意接受建议,谢谢。

我的 Matplotlib 数据:fitted distributionfitted distributionfitted distribution

for item in totalIPs:
    USA=totalIPs[18]
    JAPAN=totalIPs[10]
    UK=totalIPs[17]
    AUSTRALIA=totalIPs[0]

#print(USA)
#print(JAPAN)
#print(UK)
#print(AUSTRALIA)
#print('done')

#print(country)
#print(ipFirmnames)
#print(totalIPs)
#print("done")       

#Calculating mean and standard deviation
#from sublists in country list of lists
#i could write a function for this but dont know how

mu_USA=statistics.mean(USA)
mu_JAPAN=statistics.mean(JAPAN)
mu_UK=statistics.mean(UK)

std_USA=statistics.stdev(USA)
std_JAPAN=statistics.stdev(JAPAN)
std_UK=statistics.stdev(UK)

plt.figure(1)
plt.hist(USA, bins=10, normed=True, alpha=0.6, color='g')

plt.figure(2)
plt.hist(JAPAN,bins=10,normed=True,alpha=0.6, color ='g')

plt.figure(3)
plt.hist(UK, bins=10,normed=True, alpha=0.6, color = 'g')

standardize_USA=(np.array(USA)-mu_USA)/std_USA
standardize_JAPAN=(np.array(JAPAN)-mu_JAPAN)/std_JAPAN
standardize_UK=(np.array(UK)-mu_UK)/std_UK

xmin, xmax = plt.xlim()

x1=np.linspace(xmin, xmax, 100)
x2=np.linspace(xmin, xmax, 100)
x3=np.linspace(xmin, xmax, 100)

fitted_pdf_USA=ss.norm.pdf(x1,mu_USA, std_USA)
fitted_pdf_JAPAN=ss.norm.pdf(x3,mu_JAPAN, std_JAPAN)
fitted_pdf_UK=ss.norm.pdf(x3,mu_UK, std_UK)

plt.figure(1)
plt.plot(x1, fitted_pdf_USA, 'K', linewidth=2)

plt.figure(2)
plt.plot(x2, fitted_pdf_JAPAN,'K', linewidth=2)
fitted_pdf_JAPAN=ss.norm.pdf(x2,mu_JAPAN, std_JAPAN)


plt.figure(3)
plt.plot(x3, fitted_pdf_UK,'K', linewidth=2)

#plt.show()
print(standardize_USA)
print(standardize_JAPAN)

#print(USA)
print(UK)
print(JAPAN)

【问题讨论】:

  • 我这边的第一个也是迄今为止唯一的建议:提供您需要帮助的问题的minimal reproducible example
  • 感谢您的建议。我是 Python 和 Stackoverflow 的新手,所以我不熟悉约定。下次我会记住这一点。顺便问一下,我的情节有什么问题吗?
  • 很难理解您希望我们做什么,即使您确实需要帮助并且我们应该提供帮助。 PyMC 有一些示例代码可以帮助您入门;使用已知框架和分步记事本可以极大地帮助我们。

标签: python matplotlib plot scipy statistics


【解决方案1】:

您遇到的问题是曲线的限制仅从零件中的一条曲线获得

xmin, xmax = plt.xlim()

根据各自的数据为每个图设置单独的限制,而不是图表限制,它将解决您的问题。请使用 numpy 中的 max()min()

x1=np.linspace(USA.min(),USA.max(),100)

为每个带有各自数据的图执行此操作。这种方式会给出平滑的曲线,但限制不是图形,而是数据。如果它太小,只需通过乘法(如1.1*max())或和(max()+10min 取决于数据)来增加限制。

【讨论】:

  • 这真的很有趣。我希望你是对的,因为我花了很长时间试图找出错误。那么,您是否最小而不是使用我应该使用值的限制?我期待看到你的代码
  • @mywrathacademia 是的,使用每组的最大值和最小值应该可以工作。但是,正如评论中指出的那样,您的示例不足以重现该问题,一个版本会很好地提出一个更好的问题。
  • 我工作了。谢谢Guto,您发现问题的方式令人印象深刻。我现在按照您的建议使用相应数据的数据。虽然我不得不使用排序功能,因为曲线非常嘈杂。与实际数据相比,当我使用 xmin 和 xmax 限制时,其中一个数据集的曲线更平滑。知道这是为什么吗?
  • 另一件事。子情节背后的想法是什么?从我读到的内容来看,它们是相同图形的图,它们是副本。如果我试图在一页上拟合三个正态分布图,我是否能够为我正在做的事情绘制子图,它会比 3 个数字更好吗?我正在寻找最佳质量,同时占用页面上更少的空间。
  • @MyWrathAcademia 刚回来。关于次情节,这是一个单独的讨论,适合聊天,也许是另一个问题,但提问时要小心。你已经在这里投了反对票,因为它不是一个可重复的例子 (minimal reproducible example),我同意这一点。你可以用 20 点聊天。如果您编辑您的问题并获得评论者(包括我)的支持或回答其他问题,您就可以到达那里。
猜你喜欢
  • 2011-12-11
  • 1970-01-01
  • 2021-09-10
  • 2016-10-06
  • 2023-03-03
  • 2016-07-07
  • 2022-12-03
  • 2017-11-02
  • 2016-04-25
相关资源
最近更新 更多