1. 程式人生 > 實用技巧 >matplotlib繪製常見統計圖

matplotlib繪製常見統計圖

1.折線統計圖

# 繪製你和你同桌11歲到30歲之間所交的男女朋友數量折線圖,並進行比較,得出走勢分析
from matplotlib import pyplot as plt
from matplotlib import font_manager

myfont = font_manager.FontProperties(fname="C:\\WINDOWS\\Fonts\\simsun.ttc", size=14)

# 資料準備
x = range(20)
y1 = [1, 0, 1, 1, 2, 4, 3, 2, 3, 4, 4, 5, 6, 5, 4, 3, 3, 1, 1, 1]
y2 
= [1, 0, 3, 1, 2, 2, 3, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1] plt.figure(figsize=(20, 8), dpi=90) # 繪圖 # 表明每條線代表什麼,加上Label,color表示線條顏色,linestyle表示線條風格,可以是--也可以是-.marker表示對點的形狀標記,ms設定其大小 plt.plot(x, y1, color="blue", label="男生", linestyle="-", marker="o", ms=10) plt.plot(x, y2, color="pink", label="女生"
, linestyle=":", marker="x", ms=10) # 座標軸設定 _x_label = ["{}歲".format(i) for i in range(11, 31)] plt.xticks(x, _x_label, rotation=45, fontproperties=myfont) plt.ylabel("數量/個", fontproperties=myfont) plt.xlabel("年齡/歲", fontproperties=myfont) # 圖例設定,字型設定要用prop plt.legend(prop=myfont, loc="upper left") plt.show()

2.直方圖

# 橫著的直方圖
from matplotlib import pyplot as plt
import random
from matplotlib import font_manager

myfont = font_manager.FontProperties(fname="C:\\WINDOWS\\Fonts\\simsun.ttc", size=14)
a = ["跑男", "街舞", "姐姐乘風破浪", "嚮往的生活", "偶像練習生", "青春有你"]
b = [93.1, 90.3, 85.4, 80.1, 99.1, 96.5]

plt.figure(figsize=(20, 8), dpi=80)
# 直方圖用 bar
plt.bar(range(len(a)), b, width=0.5, color="orange")

plt.xticks(range(len(a)), a, rotation=45, fontproperties=myfont)
plt.xlabel("綜藝節目", fontproperties=myfont)
plt.ylabel("收視率 單位(%)", fontproperties=myfont)
plt.title("六大綜藝收視率", fontproperties=myfont)
# 新增網格
plt.grid(alpha=0.4)
# 展示
plt.show()

3.條形圖

# 14、15、16號這三天每一天這四部綜藝的收視率對比 繪製多個條形圖
from matplotlib import font_manager
from matplotlib import pyplot as plt

myfont= font_manager.FontProperties(fname=r"C:\\WINDOWS\\Fonts\\simsun.ttc", size=14)

a=["跑男","街舞","姐姐乘風破浪","青你"]
b_14=[93.1,90.3,85.4,87]
b_15=[93.1,90.3,85.4,67]
b_16=[93.1,90.3,85.4,76]

#水平軸的範圍
x_1=range(len(a))
x_2=range((len(a)+3),(len(a)+len(a)+3))
x_3=range((len(a)+len(a)+6),(len(a)+len(a)+6+len(a)))

plt.figure(figsize=(20,8),dpi=80)
plt.bar(x_1,b_14,width=0.9 ,label="14號",color="cyan")
plt.bar(x_2,b_15,width=0.9 ,label="15號",color="orange")
plt.bar(x_3,b_16,width=0.9 ,label="16號",color="red")

plt.legend(prop=myfont)

#座標設定
_x=list(x_1)+list(x_2)+list(x_3)
for i in range(len(a)-1):
    a+=a;
    print(a)
plt.xticks(_x,a,rotation=45,fontproperties=myfont)
plt.xlabel("綜藝節目", fontproperties=myfont)
plt.ylabel("收視率 單位(%)", fontproperties=myfont)
plt.title("六大綜藝收視率", fontproperties=myfont)
#新增網格
plt.grid(alpha =0.4)
#展示
plt.show()
# 14、15、16號這三天每一天這四部綜藝的收視率對比 繪製多個條形圖
from matplotlib import font_manager
from matplotlib import pyplot as plt

myfont= font_manager.FontProperties(fname=r"C:\\WINDOWS\\Fonts\\simsun.ttc", size=14)

a=["跑男","街舞","姐姐乘風破浪","青你"]
b_14=[93.1,90.3,85.4,87]
b_15=[93.1,90.3,85.4,67]
b_16=[93.1,90.3,85.4,76]

#水平軸的範圍
barwidth = 0.2
x_1= range(len(a))
x_2= [i+barwidth for i in x_1]
x_3= [i+barwidth for i in x_2]


plt.figure(figsize=(20,8),dpi=80)
plt.bar(x_1,b_14,width=barwidth ,label="14號",color="cyan")
plt.bar(x_2,b_15,width=barwidth ,label="15號",color="orange")
plt.bar(x_3,b_16,width=barwidth ,label="16號",color="red")

plt.legend(prop=myfont)

#座標設定
_x=list(x_1)+list(x_2)+list(x_3)

plt.xticks(x_2,a,rotation=45,fontproperties=myfont)
plt.xlabel("綜藝節目", fontproperties=myfont)
plt.ylabel("收視率 單位(%)", fontproperties=myfont)
plt.title("六大綜藝收視率", fontproperties=myfont)
#新增網格
plt.grid(alpha =0.4)
#展示
plt.show()

# 繪製三月份和十月份的溫度變化情況
from matplotlib import pyplot as plt
from matplotlib import font_manager
import random

myfont = font_manager.FontProperties(fname="C:\\WINDOWS\\Fonts\\simsun.ttc", size=14)
x_3=range(1,32)
x_10=range(51,82)
#隨機生成31個數據代表溫度
y_3=[random.randint(20,30) for i in range(31)]
y_10=[random.randint(10,20) for i in range(31)]

plt.figure(figsize=(20,8),dpi=100)
plt.scatter(x_3,y_3,label="三月份")
plt.scatter(x_10,y_10,label="十月份")

_x_label=["3月{}日".format(i) for i in range(1,32)]

_x_label+=["10月{}日".format(i-50) for i in range(51,82)]

#TypeError: unsupported operand type(s) for +: 'range' and 'range'

x=list(x_3)+list(x_10)

plt.xticks(x[::2],_x_label[::2],rotation=60,fontproperties=myfont)

plt.xlabel("時間",fontproperties=myfont)
plt.xlabel("溫度",fontproperties=myfont)
plt.grid(alpha=0.4)
plt.show()

4.散點圖