Matplotlib基础(二)

Matplotlib基础(二)

一、注释

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-10, 11)
y = x ** 2

# plt.plot(x, y)
# annotate,xy表示箭头的坐标,xytext表示“this is the bottom的坐标”
# width:the width of the arrow in points,点箭头的宽度
# headwidth:the width of the base of the arrow head in points,在点的箭头底座的宽度
# headlength:the length of the arrow head in points,点箭头的长度
# shrink:fraction of total length to ‘shrink’ from both ends,总长度为分数“缩水”从两端
# facecolor:箭头颜色
# plt.annotate("this is the bottom", xy=(0, 2), xytext=(0, 20),
#              arrowprops=dict(facecolor="g", headlength=12, headwidth=15, width=10))

# plt.show()

# 练习:画一根蓝色箭头
m = np.arange(-10, 10).reshape(4, 5)
print(m)
n = m ** 2
print(n)

plt.plot(m, n)
plt.annotate("new pants", xy=(0, 2), xytext=(0, 20),
             arrowprops=dict(facecolor="blue", headlength=10, headwidth=15, width=8))
plt.show()

二、文字

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-10, 10)
y = x ** 2

plt.plot(x, y)
plt.text(-4, 20, "right the lightening", family="Serif", size=15, color="r", style="italic", weight=700)

plt.text(-5, 40, "symphony of destruction", family="Monospace", size=15, color="g", style="italic", weight="bold",
         bbox=dict(facecolor="blue", alpha=0.3))

plt.show()

三、Tex公式

# matplotlib自带mathtext引擎,不需要安装TeX系统
# $作为开始和结束符,如果“$ y = x + z$”

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim([1, 7])
ax.set_ylim([1, 5])

ax.text(2, 4, r"$ \alpha_i \beta_j \pi \lambda \omega $", size=20)

ax.text(4, 4, r"$ \sin(0)=\cos(\frac{\pi}{2}) $", size=20)

ax.text(2, 2, r"$ \lim_{x \rightarrow y} \frac{1}{x^3} $", size=20)

ax.text(4, 2, r"$ \sqrt[4]{x}=\sqrt[2]{y} $", size=20)

plt.show()

四、工具栏

import numpy as np
import matplotlib.pyplot as plt

N = 1000
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N)) ** 2

plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()

五、区域填充

# 对曲线下面或者曲线之间的区域进行填充,通常使用fill,fill_between

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 5 * np.pi, 1000)
y1 = np.sin(x)
y2 = np.sin(2 * x)

# plt.plot(x, y1)
# plt.plot(x, y2)

# plt.fill(x, y1, "b", alpha=0.3)
# plt.fill(x, y2, "r", alpha=0.3)
# plt.show()

fig = plt.figure()
ax = plt.gca()
print(ax)
# ax.plot(x, y1, x, y2, color="black")
ax.plot(x, y1, color="r")
ax.plot(x, y2, color="b")

ax.fill_between(x, y1, y2, where=y1 > y2, facecolor="yellow", interpolate=True)
ax.fill_between(x, y1, y2, where=y2 > y1, facecolor="green", interpolate=True)

plt.show()

六、形状

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as mpatches

# patches用于生成形状

fig, ax = plt.subplots()
xy1 = np.array([0.2, 0.2])
xy2 = np.array([0.2, 0.8])
xy3 = np.array([0.8, 0.2])
xy4 = np.array([0.8, 0.8])

# xy1为圆心,0.1为半径
circle = mpatches.Circle(xy1, 0.05)
# 0.2为宽,0.1为高
rect = mpatches.Rectangle(xy2, 0.2, 0.1, color="r")
# 5表示5条边,0.1表示多边形半径
polygon = mpatches.RegularPolygon(xy3, 5, 0.1, color="g")
# 0.4表示长直径,0.2表示短直径
ellipse = mpatches.Ellipse(xy4, 0.4, 0.2, color="y")
ax.add_patch(circle)
ax.add_patch(rect)
ax.add_patch(polygon)
ax.add_patch(ellipse)

# 调整圆形比例
plt.axis("equal")
plt.grid(linestyle="--")
plt.show()

七、美化

import matplotlib.pyplot as plt
import numpy as np

# 选择要使用得样式
print(plt.style.available)
# 样式种类
"""
['bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark-palette', 'seaborn-dark', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'seaborn', 'Solarize_Light2', 'tableau-colorblind10', '_classic_test']

"""

# 常用种类为ggplot,fivethirtyeight
plt.style.use("ggplot")

fig, axes = plt.subplots(ncols=2, nrows=2)
ax1, ax2, ax3, ax4 = axes.ravel()

x, y = np.random.normal(size=(2, 100))
ax1.plot(x, y, "o")

x = np.arange(0, 10)
y = np.arange(0, 10)

# plt.rcParams["axes.prop_cycle"]返回一个默认得颜色循环
# cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])
ncolors = len(plt.rcParams["axes.prop_cycle"])
print(ncolors)

shift = np.linspace(0, 10, ncolors)
print(shift)

for i in shift:
    ax2.plot(x, y + i, "-")

x = np.arange(5)
y1, y2, y3 = np.random.randint(1, 25, size=(3, 5))
print(y1)
width = 0.25
ax3.bar(x, y1, width, )
ax3.bar(x + width, y2, width)
ax3.bar(x + width * 2, y3, width)

for i, dic_color in enumerate(plt.rcParams["axes.prop_cycle"]):
    print(i, dic_color)
    xy = np.random.normal(size=2)
    ax4.add_patch(plt.Circle(xy, radius=0.3, color=dic_color['color']))

ax4.axis('equal')
plt.show()

八、极坐标

import matplotlib.pyplot as plt
import numpy as np

r = np.arange(1, 6)

# 设置角度,2*np.pi=0
# 绘制正方形
square = np.arange(5)
square = np.full_like(square, 5)
# print(square)

# 绘制八角形
n = np.empty(9)
n.fill(5)
pi_two = np.pi * 2
theta = [0, pi_two / 8, 2 * pi_two / 8, 3 * pi_two / 8, 4 * pi_two / 8, 5 * pi_two / 8, 6 * pi_two / 8, 7 * pi_two / 8,
         8 * pi_two / 8]

# theta = [0, np.pi / 2, np.pi, 3 * np.pi / 2, 2 * np.pi]
# projection="polar",projection表示应方式,polar表示极坐标
ax = plt.subplot(111, projection="polar")
# ax.plot(theta, r, color="r", linewidth=3)
# ax.plot(theta, square, color="r", linewidth=3)
ax.plot(theta, n, color="r", linewidth=3)
ax.grid(True)
plt.show()

九、函数积分图

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon


def func(x):
    return -(x - 2) * (x - 8) + 40


x = np.linspace(0, 10)
y = func(x)
# print(y)
fig, ax = plt.subplots()
plt.plot(x, y, "r", linewidth=2)
a = 2
b = 9
ix = np.linspace(a, b)
iy = func(ix)
ixy = zip(ix, iy)
# print(list(ixy))

verts = [(a, 0)] + list(ixy) + [(b, 0)]
# print(verts)

# 颜色默认灰色,此处可通过调整数字,改变灰色深浅
poly = Polygon(verts, facecolor="0.9", edgecolor="0.5")
ax.add_patch(poly)

# 通过前两个参数(0-1)调整x,y位置
plt.figtext(0.96, 0.02, "$x$")
plt.figtext(0.01, 0.96, "$y$")
ax.set_xticks([a, b])
# ax.set_yticks([])
ax.set_xticklabels(["$a$", "$b$"])

# 设置公式显示的位置
x_math = (a + b) / 2
y_math = 35
plt.text(x_math, y_math, r"$\int_a^b (-(x - 2) * (x - 8) + 40)$", fontsize=15, horizontalalignment="center")
plt.ylim(top=50)
plt.xlim(left=0)
plt.show()

十、散点-条形图

import matplotlib.pyplot as plt
import numpy as np

plt.style.use("ggplot")

x = np.random.randn(200)
y = x + np.random.randn(200) * 0.5

margin_border = 0.1
width = 0.6
margin_between = 0.02
height = 0.2

# 先生成主图坐标
left_s = margin_border
bottom_s = margin_border
height_s = width
width_s = width

left_x = margin_border
bottom_x = margin_border + width + margin_between
height_x = height
width_x = width

left_y = margin_border + width + margin_between
bottom_y = margin_border
height_y = width
width_y = height

plt.figure(1, figsize=(8, 8))

rect_s = [left_s, bottom_s, width_s, height_s]
rect_x = [left_x, bottom_x, width_x, height_x]
rect_y = [left_y, bottom_y, width_y, height_y]

axScatter = plt.axes(rect_s)
axHisX = plt.axes(rect_x)
axHisY = plt.axes(rect_y)

# 去掉坐标轴显示
axHisX.set_xticks([])
axHisY.set_yticks([])

axScatter.scatter(x, y)

# 固定箱体的宽度
bin_width = 0.25

# 通过找出xy中的最大值,找出图形的边界
xymax = np.max([np.max(np.fabs(x)), np.max(np.fabs(y))])

# 求出每边有多少个bins
lim = int(xymax / bin_width + 1) * bin_width
# 设置x,y轴的最大最小值,让图片美化
axScatter.set_xlim(-lim, lim)
axScatter.set_ylim(-lim, lim)

bins = np.arange(-lim, lim + bin_width, bin_width)
axHisX.hist(x, bins=bins)
axHisY.hist(y, bins=bins, orientation="horizontal")

axHisX.set_xlim(axScatter.get_xlim())
axHisY.set_ylim(axScatter.get_ylim())

# 添加标题
plt.title("Scatter and Hist")

plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值