我从教程网站上读到了一系列数据。 我已经设法在该数据中绘制电视列的分布,但是我还想在第二个x轴上用StdDev刻度覆盖正态分布曲线(所以我可以比较两条曲线)。我正在努力弄清楚如何做到这一点..
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
import matplotlib.mlab as mlab
import math
# read data into a DataFrame
data = pd.read_csv('http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv', index_col=0)
# draw distribution curve
h = sorted(data.TV)
hmean = np.mean(h)
hstd = np.std(h)
pdf = stats.norm.pdf(h, hmean, hstd)
plt.plot(h, pdf)
这是一张接近我所追求的图表,其中x是StdDeviations。所有这个例子都需要第二个x轴来显示data.TV
的值
答案 0 :(得分:1)
好的,假设您想要绘制数据的分布,使用两个x轴绘制拟合的正态分布,实现此目的的一种方法如下。
将规范化数据与标准正态分布一起绘制。然后使用matplotlib
的{{1}}向绘图添加第二个x轴。在第二个轴上使用与原始x轴相同的刻度位置,但缩放标签以获得相应的原始twiny()
值。结果如下:
TV
答案 1 :(得分:0)
不确定你真正想要什么,但你可能会像这样使用第二轴
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
import matplotlib.mlab as mlab
import math
# read data into a DataFrame
data = pd.read_csv('Advertising.csv', index_col=0)
fig, ax1 = plt.subplots()
# draw distribution curve
h = sorted(data.TV)
ax1.plot(h,'b-')
ax1.set_xlabel('TV')
ax1.set_ylabel('Count', color='b')
for tl in ax1.get_yticklabels():
tl.set_color('b')
hmean = np.mean(h)
hstd = np.std(h)
pdf = stats.norm.pdf(h, hmean, hstd)
ax2 = ax1.twinx()
ax2.plot(h, pdf, 'r.')
ax2.set_ylabel('pdf', color='r')
for tl in ax2.get_yticklabels():
tl.set_color('r')
plt.show()