首先導(dǎo)入模塊
import numpy as np
import matplotlib
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
from mpl_toolkits.mplot3d import Axes3D
解決中文亂碼問題
# 解決中文亂碼問題
plt.rcParams['font.sans-serif']=[u'simHei']
plt.rcParams['axes.unicode_minus']=False
1霜幼、簡單曲線圖
def simple_plot():
? ? """
? ? simple plot
? ? """
? ? # 生成測(cè)試數(shù)據(jù)
? ? x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
? ? y_cos, y_sin = np.cos(x), np.sin(x)
? ? # 生成畫布罗标,并設(shè)定標(biāo)題
? ? plt.figure(figsize=(8, 6), dpi=80)
? ? plt.title("簡單曲線圖")
? ? plt.grid(True)
? ? # 設(shè)置X軸
? ? plt.xlabel("X軸")
? ? plt.xlim(-4.0, 4.0)
? ? plt.xticks(np.linspace(-4, 4, 9, endpoint=True))
? ? # 設(shè)置Y軸
? ? plt.ylabel("Y軸")
? ? plt.ylim(-1.0, 1.0)
? ? plt.yticks(np.linspace(-1, 1, 9, endpoint=True))
? ? # 畫兩條曲線
? ? plt.plot(x, y_cos, "b--", linewidth=2.0, label="cos示例")
? ? plt.plot(x, y_sin, "g-", linewidth=2.0, label="sin示例")
? ? # 設(shè)置圖例位置,loc可以為[upper, lower, left, right, center]
? ? plt.legend(loc="upper left",shadow=True)
? ? # 圖形顯示
? ? plt.show()
? ? return
simple_plot()
2第焰、復(fù)雜曲線圖,雙y軸
def simple_advanced_plot():
? ? """
? ? simple advanced plot
? ? """
? ? # 生成測(cè)試數(shù)據(jù)
? ? x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
? ? y_cos, y_sin = np.cos(x), np.sin(x)
? ? # 生成畫布, 并設(shè)定標(biāo)題
? ? plt.figure(figsize=(8, 6), dpi=80)
? ? plt.title("復(fù)雜曲線圖")
? ? plt.grid(True)
? ? # 畫圖的另外一種方式
? ? ax_1 = plt.subplot(111)
? ? ax_1.plot(x, y_cos, color="blue", linewidth=2.0, linestyle="--", label="左cos")
? ? ax_1.legend(loc="upper left", shadow=True)
? ? # 設(shè)置Y軸(左邊)
? ? ax_1.set_ylabel("左cos的y軸")
? ? ax_1.set_ylim(-1.0, 1.0)
? ? ax_1.set_yticks(np.linspace(-1, 1, 9, endpoint=True))
? ? # 畫圖的另外一種方式
? ? ax_2 = ax_1.twinx()
? ? ax_2.plot(x, y_sin, color="green", linewidth=2.0, linestyle="-", label="右sin")
? ? ax_2.legend(loc="upper right", shadow=True)
? ? # 設(shè)置Y軸(右邊)
? ? ax_2.set_ylabel("右sin的y軸")
? ? ax_2.set_ylim(-2.0, 2.0)
? ? ax_2.set_yticks(np.linspace(-2, 2, 9, endpoint=True))
? ? # 設(shè)置X軸(共同)
? ? ax_1.set_xlabel("x軸")
? ? ax_1.set_xlim(-4.0, 4.0)
? ? ax_1.set_xticks(np.linspace(-4, 4, 9, endpoint=True))
? ? # 圖形顯示
? ? plt.show()
? ? return
simple_advanced_plot()
3掷邦、子圖顯示
def subplot_plot():
? ? """
? ? subplot plot
? ? """
? ? # 子圖的style列表
? ? style_list = ["g+-", "r*-", "b.-", "yo-"]
? ? # 依次畫圖
? ? for num in range(4):
? ? ? ? # 生成測(cè)試數(shù)據(jù)
? ? ? ? x = np.linspace(0.0, 2+num, num=10*(num+1))
? ? ? ? y = np.sin((5-num) * np.pi * x)
? ? ? ? # 子圖的生成方式
? ? ? ? plt.subplot(2, 2, num+1)
? ? ? ? plt.title("子圖 %d" % (num+1))
? ? ? ? plt.plot(x, y, style_list[num])
? ? # 圖形顯示
? ? plt.show()
? ? return
subplot_plot()
4、柱狀圖繪制
def bar_plot():
? ? """
? ? bar plot
? ? """
? ? # 生成測(cè)試數(shù)據(jù)
? ? means_men = (20, 35, 30, 35, 27)
? ? means_women = (25, 32, 34, 20, 25)
? ? # 設(shè)置標(biāo)題
? ? plt.title("柱狀圖")
? ? # 設(shè)置相關(guān)參數(shù)
? ? index = np.arange(len(means_men))
? ? bar_width = 0.35
? ? # 畫柱狀圖
? ? plt.bar(index, means_men, width=bar_width, alpha=0.2, color="b", label="男生")
? ? plt.bar(index+bar_width, means_women, width=bar_width, alpha=0.8, color="r", label="女生")
? ? plt.legend(loc="upper right", shadow=True)
? ? # 設(shè)置柱狀圖標(biāo)示
? ? for x, y in zip(index, means_men):
? ? ? ? plt.text(x, y+0.3, y, ha="center", va="bottom")
? ? for x, y in zip(index, means_women):
? ? ? ? plt.text(x+bar_width, y+0.3, y, ha="center", va="bottom")
? ? # 設(shè)置刻度范圍/坐標(biāo)軸名稱等
? ? plt.ylim(0, 45)
? ? plt.xlabel("分組Group")
? ? plt.ylabel("得分Scores")
? ? plt.xticks(index+(bar_width/2), ("A組", "B組", "C組", "D組", "E組"))
? ? # 圖形顯示
? ? plt.show()
? ? return
bar_plot()
5、水平柱狀圖
def barh_plot():
? ? """
? ? barh plot
? ? """
? ? # 生成測(cè)試數(shù)據(jù)
? ? means_men = (20, 35, 30, 35, 27)
? ? means_women = (25, 32, 34, 20, 25)
? ? # 設(shè)置標(biāo)題
? ? plt.title("橫向柱狀圖")
? ? # 設(shè)置相關(guān)參數(shù)
? ? index = np.arange(len(means_men))
? ? bar_height = 0.35
? ? # 畫柱狀圖(水平方向)
? ? plt.barh(index, means_men, height=bar_height, alpha=0.2, color="b", label="Men")
? ? plt.barh(index+bar_height, means_women, height=bar_height, alpha=0.8, color="r", label="Women")
? ? plt.legend(loc="upper right", shadow=True)
? ? # 設(shè)置柱狀圖標(biāo)示
? ? for x, y in zip(index, means_men):
? ? ? ? plt.text(y+0.3, x, y, ha="left", va="center")
? ? for x, y in zip(index, means_women):
? ? ? ? plt.text(y+0.3, x+bar_height, y, ha="left", va="center")
? ? # 設(shè)置刻度范圍/坐標(biāo)軸名稱等
? ? plt.xlim(0, 45)
? ? plt.xlabel("Scores")
? ? plt.ylabel("Group")
? ? plt.yticks(index+(bar_height/2), ("A", "B", "C", "D", "E"))
? ? # 圖形顯示
? ? plt.show()
? ? return
barh_plot()
6磷支、高級(jí)柱狀圖
def bar_advanced_plot():
? ? """
? ? bar advanced plot
? ? """
? ? # 生成測(cè)試數(shù)據(jù)
? ? means_men = np.array((20, 35, 30, 35, 27, 25, 32, 34, 20, 25))
? ? means_women = np.array((25, 32, 34, 20, 25, 20, 35, 30, 35, 27))
? ? # 設(shè)置標(biāo)題
? ? plt.title("高級(jí)柱狀圖")
? ? # 設(shè)置相關(guān)參數(shù)
? ? index = np.arange(len(means_men))
? ? bar_width = 0.8
? ? # 畫柱狀圖(兩種:X軸以上/X軸以下)
? ? plt.bar(index, means_men, width=bar_width, alpha=0.4, color="b", label="Men")
? ? plt.bar(index, -means_women, width=bar_width, alpha=0.4, color="r", label="Women")
? ? # 畫折線圖(兩種,和柱狀圖對(duì)應(yīng))
? ? plt.plot(index, means_men, marker="o", linestyle="-", color="r", label="Men line")
? ? plt.plot(index, -means_women, marker=".", linestyle="--", color="b", label="Women line")
? ? # 設(shè)置圖形標(biāo)示(兩種,和柱狀圖對(duì)應(yīng))
? ? for x, y in zip(index, means_men):
? ? ? ? plt.text(x, y+1, y, ha="center", va="bottom")
? ? for x, y in zip(index, means_women):
? ? ? ? plt.text(x, -y-1, y, ha="center", va="top")
? ? # 設(shè)置Y軸和圖例位置
? ? plt.ylim(-45, 80)
? ? plt.legend(loc="upper left", shadow=True)
? ? # 圖形顯示
? ? plt.show()
? ? return
bar_advanced_plot()
7棺棵、類表格圖形
def table_plot():
? ? """
? ? table plot
? ? """
? ? # 生成測(cè)試數(shù)據(jù)
? ? data = np.array([
? ? ? ? [1, 4, 2, 5, 2],
? ? ? ? [2, 1, 1, 3, 6],
? ? ? ? [5, 3, 6, 4, 1]
? ? ])
? ? # 設(shè)置標(biāo)題
? ? plt.title("層次柱狀圖")
? ? # 設(shè)置相關(guān)參數(shù)
? ? index = np.arange(len(data[0]))
? ? color_index = ["r", "g", "b"]
? ? # 聲明底部位置
? ? bottom = np.array([0, 0, 0, 0, 0])
? ? # 依次畫圖,并更新底部位置
? ? for i in range(len(data)):
? ? ? ? plt.bar(index, data[i], width=0.5, color=color_index[i], bottom=bottom, alpha=0.7, label="標(biāo)簽 %d" % i)
? ? ? ? bottom += data[i]
? ? # 設(shè)置圖例位置
? ? plt.legend(loc="upper left", shadow=True)
? ? # 圖形顯示
? ? plt.show()
? ? return
table_plot()
8楼咳、直方圖
def histograms_plot():
? ? """
? ? histograms plot
? ? """
? ? # 生成測(cè)試數(shù)據(jù)
? ? mu, sigma = 100, 15
? ? x = mu + sigma * np.random.randn(10000)
? ? # 設(shè)置標(biāo)題
? ? plt.title("直方圖")
? ? # 畫直方圖, 并返回相關(guān)結(jié)果
? ? n, bins, patches = plt.hist(x, bins=50, density=1, cumulative=False, color="green", alpha=0.6, label="直方圖")
? ? # 根據(jù)直方圖返回的結(jié)果, 畫折線圖
? ? y = mlab.normpdf(bins, mu, sigma)
? ? plt.plot(bins, y, "r--", label="線條")
? ? # 設(shè)置圖例位置
? ? plt.legend(loc="upper left", shadow=True)
? ? # 圖形顯示
? ? plt.show()
? ? return
histograms_plot()
9、餅狀圖
def pie_plot():
? ? """
? ? pie plot
? ? """
? ? # 生成測(cè)試數(shù)據(jù)
? ? sizes = [15, 30, 45, 10]
? ? labels = ["Frogs", "中文", "Dogs", "Logs"]
? ? colors = ["yellowgreen", "gold", "lightskyblue", "lightcoral"]
? ? # 設(shè)置標(biāo)題
? ? plt.title("餅圖")
? ? # 設(shè)置突出參數(shù)
? ? explode = [0, 0.05, 0, 0]
? ? # 畫餅狀圖
? ? patches, l_text, p_text = plt.pie(sizes, explode=explode, labels=labels, colors=colors,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? autopct="%1.1f%%", shadow=True, startangle=90)
? ? plt.axis("equal")
? ? # 圖形顯示
? ? plt.show()
? ? return
pie_plot()
10烛恤、散點(diǎn)圖
def scatter_plot():
? ? """
? ? scatter plot
? ? """
? ? # 生成測(cè)試數(shù)據(jù)
? ? point_count = 1000
? ? x_index = np.random.random(point_count)
? ? y_index = np.random.random(point_count)
? ? # 設(shè)置標(biāo)題
? ? plt.title("散點(diǎn)圖")
? ? # 設(shè)置相關(guān)參數(shù)
? ? color_list = np.random.random(point_count)
? ? scale_list = np.random.random(point_count) * 100
? ? # 畫散點(diǎn)圖
? ? plt.scatter(x_index, y_index, s=scale_list, c=color_list, marker="o")
? ? # 圖形顯示
? ? plt.show()
? ? return
scatter_plot()
11母怜、雷達(dá)圖
def radar_plot():
? ? """
? ? radar plot
? ? """
? ? # 生成測(cè)試數(shù)據(jù)
? ? labels = np.array(["A組", "B組", "C組", "D組", "E組", "F組"])
? ? data = np.array([68, 83, 90, 77, 89, 73])
? ? theta = np.linspace(0, 2*np.pi, len(data), endpoint=False)
? ? # 數(shù)據(jù)預(yù)處理
? ? data = np.concatenate((data, [data[0]]))
? ? theta = np.concatenate((theta, [theta[0]]))
? ? # 畫圖方式
? ? plt.subplot(111, polar=True)
? ? plt.title("雷達(dá)圖")
? ? # 設(shè)置"theta grid"/"radar grid"
? ? plt.thetagrids(theta*(180/np.pi), labels=labels)
? ? plt.rgrids(np.arange(20, 100, 20), labels=np.arange(20, 100, 20), angle=0)
? ? plt.ylim(0, 100)
? ? # 畫雷達(dá)圖,并填充雷達(dá)圖內(nèi)部區(qū)域
? ? plt.plot(theta, data, "bo-", linewidth=2)
? ? plt.fill(theta, data, color="red", alpha=0.25)
? ? # 圖形顯示
? ? plt.show()
? ? return
radar_plot()
12、三維散點(diǎn)圖
def three_dimension_scatter():
? ? """
? ? 3d scatter plot
? ? """
? ? # 生成測(cè)試數(shù)據(jù)
? ? x = np.random.random(100)
? ? y = np.random.random(100)
? ? z = np.random.random(100)
? ? color = np.random.random(100)
? ? scale = np.random.random(100) * 100
? ? # 生成畫布(兩種形式)
? ? fig = plt.figure()
? ? fig.suptitle("三維散點(diǎn)圖")
? ? # ax = fig.gca(projection="3d")
? ? ax = fig.add_subplot(111, projection="3d")
? ? # 畫三維散點(diǎn)圖
? ? ax.scatter(x, y, z, s=scale, c=color, marker=".")
? ? # 設(shè)置坐標(biāo)軸圖標(biāo)
? ? ax.set_xlabel("X Label")
? ? ax.set_ylabel("Y Label")
? ? ax.set_zlabel("Z Label")
? ? # 設(shè)置坐標(biāo)軸范圍
? ? ax.set_xlim(0, 1)
? ? ax.set_ylim(0, 1)
? ? ax.set_zlim(0, 1)
? ? # 圖形顯示
? ? plt.show()
? ? return
three_dimension_scatter()
13缚柏、三維折線圖
def three_dimension_line():
? ? """
? ? 3d line plot
? ? """
? ? # 生成測(cè)試數(shù)據(jù)
? ? x = np.linspace(0, 1, 1000)
? ? y = np.linspace(0, 1, 1000)
? ? z = np.sin(x * 2 * np.pi) / (y + 0.1)
? ? # 生成畫布(兩種形式)
? ? fig = plt.figure()
? ? ax = fig.gca(projection="3d", title="三維折線圖")
? ? # ax = fig.add_subplot(111, projection="3d", title="plot title")
? ? # 畫三維折線圖
? ? ax.plot(x, y, z, color="red", linestyle="-")
? ? # 設(shè)置坐標(biāo)軸圖標(biāo)
? ? ax.set_xlabel("X Label")
? ? ax.set_ylabel("Y Label")
? ? ax.set_zlabel("Z Label")
? ? # 圖形顯示
? ? plt.show()
? ? return
three_dimension_line()
14苹熏、三維柱狀圖
def three_dimension_bar():
? ? """
? ? 3d bar plot
? ? """
? ? # 生成測(cè)試數(shù)據(jù)(位置數(shù)據(jù))
? ? xpos = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
? ? ypos = [2, 3, 4, 5, 1, 6, 2, 1, 7, 2]
? ? zpos = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
? ? # 生成測(cè)試數(shù)據(jù)(柱形參數(shù))
? ? dx = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
? ? dy = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
? ? dz = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
? ? # 生成畫布(兩種形式)
? ? fig = plt.figure()
? ? ax = fig.gca(projection="3d", title="三維柱狀圖")
? ? # 畫三維柱狀圖
? ? ax.bar3d(xpos, ypos, zpos, dx, dy, dz, alpha=0.5)
? ? # 設(shè)置坐標(biāo)軸圖標(biāo)
? ? ax.set_xlabel("X Label")
? ? ax.set_ylabel("Y Label")
? ? ax.set_zlabel("Z Label")
? ? # 圖形顯示
? ? plt.show()
? ? return
three_dimension_bar()
15、圖形填充
def fill_plot():
? ? """
? ? fill plot
? ? """
? ? # 生成測(cè)試數(shù)據(jù)
? ? x = np.linspace(-2*np.pi, 2*np.pi, 1000, endpoint=True)
? ? y = np.sin(x)
? ? # 設(shè)置標(biāo)題
? ? plt.title("填充圖")
? ? # 畫圖
? ? plt.plot(x, y, color="blue", alpha=1.00)
? ? # 填充圖形, plt.fill_between(x, y1, y2, where=None, *kwargs)
? ? plt.fill_between(x, 0, y, where=(y > 0), color="blue", alpha=0.25)
? ? plt.fill_between(x, 0, y, where=(y < 0), color="red", alpha=0.25)
? ? # 圖形顯示
? ? plt.show()
? ? return
fill_plot()