Python 3.x 使用matplotlib.pylot绘制直方图和位于直方图上的平滑曲线

Python 3.x 使用matplotlib.pylot绘制直方图和位于直方图上的平滑曲线,python-3.x,matplotlib,histogram,curve,Python 3.x,Matplotlib,Histogram,Curve,我曾尝试使用matplotlib和pandas绘制直方图,但在绘制平滑曲线时,它给了我一个错误,我可以请您帮助解决这个问题,也许可以给我一些方法来使用matplotlib绘制直方图上的平滑曲线我正在尝试不使用任何其他库(seaborn)这是代码 mu,sigma = 100,15 plt.style.use('dark_background') x = mu + sigma * np.random.randn(10000) n,bins,patches = plt.hist(x,bins=

我曾尝试使用matplotlib和pandas绘制直方图,但在绘制平滑曲线时,它给了我一个错误,我可以请您帮助解决这个问题,也许可以给我一些方法来使用matplotlib绘制直方图上的平滑曲线我正在尝试不使用任何其他库(seaborn)这是代码

mu,sigma = 100,15   
plt.style.use('dark_background')
x = mu + sigma * np.random.randn(10000)
n,bins,patches = plt.hist(x,bins=50,density=1,facecolor='g',alpha = 0.5)
zee=bins[:-1]
plt.plot(np.round(zee),patches,'ro')
plt.xlabel('Smarts')
plt.ylabel('Probablity')
plt.title('Histogram of the Iq')
plt.axis([40,160,0,0.03])
plt.grid(1)
plt.show()
显示的错误是

 python3 -u "/home/somesh/Downloads/vscode_code/python ml course /firstml.py"
Traceback (most recent call last):
  File "/home/somesh/Downloads/vscode_code/python ml course /firstml.py", line 149, in <module>
    plt.plot(np.round(zee),patches,'ro')
  File "/home/somesh/.local/lib/python3.8/site-packages/matplotlib/pyplot.py", line 2840, in plot
    return gca().plot(
  File "/home/somesh/.local/lib/python3.8/site-packages/matplotlib/axes/_axes.py", line 1745, in plot
    self.add_line(line)
  File "/home/somesh/.local/lib/python3.8/site-packages/matplotlib/axes/_base.py", line 1964, in add_line
    self._update_line_limits(line)
  File "/home/somesh/.local/lib/python3.8/site-packages/matplotlib/axes/_base.py", line 1986, in _update_line_limits
    path = line.get_path()
  File "/home/somesh/.local/lib/python3.8/site-packages/matplotlib/lines.py", line 1011, in get_path
    self.recache()
  File "/home/somesh/.local/lib/python3.8/site-packages/matplotlib/lines.py", line 658, in recache
    y = _to_unmasked_float_array(yconv).ravel()
  File "/home/somesh/.local/lib/python3.8/site-packages/matplotlib/cbook/__init__.py", line 1289, in _to_unmasked_float_array
    return np.asarray(x, float)
  File "/home/somesh/.local/lib/python3.8/site-packages/numpy/core/_asarray.py", line 85, in asarray
    return array(a, dtype, copy=False, order=order)
TypeError: float() argument must be a string or a number, not 'Rectangle'
python3-u”/home/somesh/Downloads/vscode\u code/python-ml-course/firstml.py“
回溯(最近一次呼叫最后一次):
文件“/home/somesh/Downloads/vscode\u code/python-ml-course/firstml.py”,第149行,在
plt.绘图(np.圆形(zee)、斑块、“ro”)
文件“/home/somesh/.local/lib/python3.8/site packages/matplotlib/pyplot.py”,第2840行,在plot中
返回gca().plot(
文件“/home/somesh/.local/lib/python3.8/site packages/matplotlib/axes/_axes.py”,第1745行,在绘图中
自我添加_行(行)
文件“/home/somesh/.local/lib/python3.8/site packages/matplotlib/axes/_base.py”,第1964行,添加行
自我更新行限制(行)
文件“/home/somesh/.local/lib/python3.8/site packages/matplotlib/axes/\u base.py”,第1986行,在更新行中
path=line.get_path()
文件“/home/somesh/.local/lib/python3.8/site packages/matplotlib/lines.py”,第1011行,在get\u路径中
self.recache()
文件“/home/somesh/.local/lib/python3.8/site packages/matplotlib/lines.py”,第658行,在recache中
y=\u到\u无掩码\u浮点数组(yconv).ravel()
文件“/home/somesh/.local/lib/python3.8/site packages/matplotlib/cbook/_init__.py”,第1289行,在_to_unmasked_float_数组中
返回np.asarray(x,float)
asarray中的文件“/home/somesh/.local/lib/python3.8/site packages/numpy/core/_asarray.py”,第85行
返回数组(a,数据类型,copy=False,order=order)
TypeError:float()参数必须是字符串或数字,而不是“矩形”
这是否可以仅使用matplotlib库绘制平滑曲线

编辑1:谢谢你的回答,我终于发现了错误
n
zee
具有相同的大小,即
长度(箱子)-1

mu,sigma = 100,15   
plt.style.use('dark_background')
x = mu + sigma * np.random.randn(10000)
n,bins,patches = plt.hist(x,bins=50,density=1,facecolor='g',alpha = 0.5)
zee=bins[:-1]

## this
plt.plot(np.round(zee),n,'ro')
输出:


n
zee
具有相同的大小,即
长度(箱子)-1

mu,sigma = 100,15   
plt.style.use('dark_background')
x = mu + sigma * np.random.randn(10000)
n,bins,patches = plt.hist(x,bins=50,density=1,facecolor='g',alpha = 0.5)
zee=bins[:-1]

## this
plt.plot(np.round(zee),n,'ro')
输出:


在您的代码中,
zee
是matplotlibobject矩形对象。但是,plot函数需要一个
浮点
作为输入

因为您正在绘制的是正态分布。而且,您希望曲线平滑。因此,为什么不生成正态分布并将其绘制到同一图形中呢。这是您的代码的修改版本

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

mu,sigma = 100,15   
plt.style.use('dark_background')
x = mu + sigma * np.random.randn(10000)
n,bins,patches = plt.hist(x,bins=50,density=1,facecolor='g',alpha = 0.5)

# zee=bins[:-1]
# plt.plot(np.round(zee),patches,'ro')
x_overlay = np.linspace(mu - 3*sigma, mu + 3*sigma, 100)
plt.plot(x_overlay, stats.norm.pdf(x_overlay, mu, sigma),"ro")

plt.xlabel('Smarts')
plt.ylabel('Probablity')
plt.title('Histogram of the Iq')
plt.axis([40,160,0,0.03])
plt.grid(1)
plt.show()
绘图的输出:

在您的代码中,
zee
是matplotlibobject矩形对象。但是,plot函数需要一个
浮点
作为输入

因为您正在绘制的是正态分布。而且,您希望曲线平滑。因此,为什么不生成正态分布并将其绘制到同一图形中呢。这是您的代码的修改版本

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

mu,sigma = 100,15   
plt.style.use('dark_background')
x = mu + sigma * np.random.randn(10000)
n,bins,patches = plt.hist(x,bins=50,density=1,facecolor='g',alpha = 0.5)

# zee=bins[:-1]
# plt.plot(np.round(zee),patches,'ro')
x_overlay = np.linspace(mu - 3*sigma, mu + 3*sigma, 100)
plt.plot(x_overlay, stats.norm.pdf(x_overlay, mu, sigma),"ro")

plt.xlabel('Smarts')
plt.ylabel('Probablity')
plt.title('Histogram of the Iq')
plt.axis([40,160,0,0.03])
plt.grid(1)
plt.show()
绘图的输出:

patches
是矩形,所以你不应该用它们来绘制任何东西。我想你应该用
n
来绘制
zee
。但是n的大小不同,它显示的参数必须是字符串或数字,而不是矩形。你一定要再试一次:-)。如果不使用scipy的库
面片
是矩形,则无法尝试此操作,因此您不应将它们与任何对象进行对比。我想你想用
n
zee
作图。但是n的大小不同,它显示参数必须是字符串或数字而不是矩形。你一定要再试一次:-)。如果不使用scipy的库,这是不可能的是的,我正是在找这个是的,我正是在找这个为什么我们需要找到函数的pdf,我们可以用'plt.plot(np.round(zee),n,'ro')做同样的事情,我以为你在寻找数据的理论描述。这就是我猜你的“平滑曲线”的意思。如果你正在处理真实数据,你也可以进行拟合。为什么我们需要找到函数的pdf?我们可以对'plt.plot(np.round(zee),n,'ro')'做同样的事情。我想你是在寻找数据的理论描述。这就是我猜你的“平滑曲线”的意思。如果您正在处理真实数据,也可以进行拟合。