19.散点图(Scatter plots)
19.1.连接散点图 (Connected scatter plot)
19.2.气泡图(Bubble chart)
19.3.不同颜色的散点图
20.直方图(Histograms)
19.散点图(Scatter plots)
当想显示两个变量之间的关系时,使用散点图。 散点图有时称为相关图,因为它们显示了两个变量之间的关系。
import numpy as np
import matplotlib.pyplot as plt
plt.scatter(x=range(77, 770, 10),
y=np.random.randn(70)*55+range(77, 770, 10),
s=200, alpha=0.6)
plt.tick_params(labelsize=12)
plt.xlabel('Surface(m2)', size=12)
plt.ylabel('Turnover (K dollars)', size=12)
plt.xlim(left=0)
plt.ylim(bottom=0)
plt.show()
此图描述了商店面积与其营业额之间的正相关关系。
import numpy as np
import matplotlib.pyplot as plt
plt.scatter(x=range(20, 80, 1), y=np.abs(np.random.randn(60)*40),
s=200,
alpha=0.6)
plt.xlabel('Age', size=12)
plt.ylabel('Average purchase cost per week(dollars)', size=12)
plt.show()
此图表明客户的年龄与其每周购买费用之间没有关心。
19.1.连接散点图 (Connected scatter plot)
连接的散点图是散点图和折线图之间的混合,它使用线段来连接连续的散点图点,例如以说明随时间变化的轨迹。
连接的散点图可视化了散点图中的两个相关时间序列,并将这些点与时间顺序上的线连接起来。
import numpy as np
import matplotlib.pyplot as plt
turnover = [30, 38, 26, 20, 21, 15, 8, 5, 3, 9, 25, 27]
plt.plot(np.arange(12), turnover, marker='o')
plt.show()
假设上面的图描述了一年内销售营业额。 根据该图,我们可以发现销售在冬天达到顶峰,然后从春季到夏季下降。
19.2.气泡图(Bubble chart)
气泡图是一种显示三个维度的数据的图。一个附加变量的值通过点的大小表示。
import numpy as np
import matplotlib.pyplot as plt
nbclients = range(10, 494, 7)
plt.scatter(x=range(77, 770, 10),
y=np.random.randn(70)*55+range(77, 770, 10),
s=nbclients, alpha=0.6)
plt.show()
19.3.不同颜色的散点图
由matplotlib创建的散点图无法根据类别变量的值指定颜色。 因此,我们必须重叠不同颜色的图。
import numpy as np
import matplotlib.pyplot as plt
plt.scatter(x=range(40, 70, 1),
y=np.abs(np.random.randn(30)*20),
s=200,
#c = 'blue',
alpha=0.6,
label='40-69')
plt.scatter(x=range(20, 40, 1),
y=np.abs(np.random.randn(20)*40),
s=200,
#c = 'red',
alpha=0.6,
label='20-39')
plt.legend() # 每次都要执行
plt.show()
这个2色散点图清楚地显示了年轻人与中年人或老年人之间的每周购买花费的差异:年轻人的平均每周购买量是中年人或老年人的两倍。
20.直方图(Histograms)
直方图是一种统计报告图,是一些数值数据的频率分布的图形表示。由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。
直方图是数值数据分布的图形表示,是一个连续变量的概率分布的估计。
为了构建直方图,第一步是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。 这些值通常被指定为连续的,不重叠的变量间隔。 间隔必须相邻,并且通常是相等的大小。
如果构造直方图,首先将可能的x值范围分配到通常相等大小和相邻的区间。
pyplot.hist函数定义文档:plot.hist函数定义文档plot.hist(https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.hist.html)
现在我们创建一个随机数的直方图:
import matplotlib.pyplot as plt
import numpy as np
gaussian_numbers = np.random.normal(size=10000)
print(gaussian_numbers)
'''
输出结果:
[-2.88618646 -0.15302214 -0.35230715 ... -0.42074156 0.41650123 0.56230326]
'''
plt.hist(gaussian_numbers)
plt.title("Gaussian Histogram")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.show()
返回值:
n The values of the histogram bins.
bins
The edges of the bins. Length nbins + 1 (nbins left edges and right edge of last bin).
patches
Silent list of individual patches used to create the histogram or list of such list if multiple input datasets.
import matplotlib.pyplot as plt
import numpy as np
gaussian_numbers = np.random.normal(size=10000)
print(gaussian_numbers)
'''
输出结果:
[-2.88618646 -0.15302214 -0.35230715 ... -0.42074156 0.41650123 0.56230326]
'''
n, bins, patches = plt.hist(gaussian_numbers)
print("n: ", n, sum(n))
print("bins: ", bins)
for i in range(len(bins)-1):
print(bins[i+1] -bins[i])
print("patches: ", patches)
print(patches[1])
"""
输出结果:
n: [ 25. 182. 940. 2230. 2951. 2268. 1066. 300. 34. 4.] 10000.0
bins: [-3.44422377 -2.68683456 -1.92944534 -1.17205613 -0.41466692 0.3427223
1.10011151 1.85750072 2.61488994 3.37227915 4.12966836]
0.7573892130572868
0.757389213057287
0.757389213057287
0.7573892130572868
0.7573892130572868
0.7573892130572872
0.7573892130572863
0.7573892130572872
0.7573892130572872
0.7573892130572859
patches: <BarContainer object of 10 artists>
Rectangle(xy=(-2.68683, 0), width=0.757389, height=182, angle=0)
"""
plt.title("Gaussian Histogram")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.show()
参数说明:
data:必选参数,绘图数据
bins:直方图的长条形数目,可选项,默认为10
normed:是否将得到的直方图向量归一化,可选项,默认为0,代表不归一化,显示频数。normed=1,表示归一化,显示频率。
facecolor:长条形的颜色
edgecolor:长条形边框的颜色
alpha:透明度
让我们增加bin的数量。 如果有10,000个随机值,将关键字参数bins设置为100:
plt.hist(gaussian_numbers, bins=100)
plt.show()
hist的另一个重要关键字参数是density。 density是可选的,默认值为False。 如果将其设置为True,则返回元组的第一个元素将被归一化以形成概率密度的计数值, 即直方图下的面积(或积分)总和为1。
plt.hist(gaussian_numbers, bins=100, density=True)
plt.show()
hist可设置edgecolor和color。
plt.hist(gaussian_numbers,
bins=100,
density=True,
edgecolor="#6A9662",
color="#DDFFDD")
plt.show()
通过设置参数cumulative,我们也可以将其绘制为累积分布函数。
n, bins, patches = plt.hist(gaussian_numbers,
bins=100,
density=True,
edgecolor="#BB5566",
color="#DDFFDD",
cumulative=True)
plt.show()