Matplotlib基础(二)
一、注释
import matplotlib. pyplot as plt
import numpy as np
x = np. arange( - 10 , 11 )
y = x ** 2
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公式
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( )
五、区域填充
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)
fig = plt. figure( )
ax = plt. gca( )
print ( ax)
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
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 ] )
circle = mpatches. Circle( xy1, 0.05 )
rect = mpatches. Rectangle( xy2, 0.2 , 0.1 , color= "r" )
polygon = mpatches. RegularPolygon( xy3, 5 , 0.1 , color= "g" )
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']
"""
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 )
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 )
square = np. arange( 5 )
square = np. full_like( square, 5 )
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 ]
ax = plt. subplot( 111 , projection= "polar" )
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)
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)
verts = [ ( a, 0 ) ] + list ( ixy) + [ ( b, 0 ) ]
poly = Polygon( verts, facecolor= "0.9" , edgecolor= "0.5" )
ax. add_patch( poly)
plt. figtext( 0.96 , 0.02 , "$x$" )
plt. figtext( 0.01 , 0.96 , "$y$" )
ax. set_xticks( [ a, b] )
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
xymax = np. max ( [ np. max ( np. fabs( x) ) , np. max ( np. fabs( y) ) ] )
lim = int ( xymax / bin_width + 1 ) * bin_width
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( )