天天看點

Python 中用 matplotlib 畫散列點 (Scatter)

http://blog.topspeedsnail.com/archives/830

基本散列點繪制

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 from matplotlib import pyplot as plt import numpy as np   # Generating a Gaussion dataset: # creating random vectors from the multivariate normal distribution # given mean and covariance mu_vec1 = np . array ( [ 0 , 0 ] ) cov_mat1 = np . array ( [ [ 2 , 0 ] , [ 0 , 2 ] ] )   x1_samples = np . random . multivariate_normal ( mu_vec1 , cov_mat1 , 100 ) x2_samples = np . random . multivariate_normal ( mu_vec1 + 0.2 , cov_mat1 + 0.2 , 100 ) x3_samples = np . random . multivariate_normal ( mu_vec1 + 0.4 , cov_mat1 + 0.4 , 100 )   # x1_samples.shape -> (100, 2), 100 rows, 2 columns   plt . figure ( figsize = ( 8 , 6 ) )   plt . scatter ( x1_samples [ : , 0 ] , x1_samples [ : , 1 ] , marker = 'x' ,              color = 'blue' , alpha = 0.7 , label = 'x1 samples' ) plt . scatter ( x2_samples [ : , 0 ] , x1_samples [ : , 1 ] , marker = 'o' ,              color = 'green' , alpha = 0.7 , label = 'x2 samples' ) plt . scatter ( x3_samples [ : , 0 ] , x1_samples [ : , 1 ] , marker = '^' ,              color = 'red' , alpha = 0.7 , label = 'x3 samples' ) plt . title ( 'Basic scatter plot' ) plt . ylabel ( 'variable X' ) plt . xlabel ( 'Variable Y' ) plt . legend ( loc = 'upper right' )   plt . show ( )
Python 中用 matplotlib 畫散列點 (Scatter)

帶标簽

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import matplotlib . pyplot as plt   x_coords = [ 0.13 , 0.22 , 0.39 , 0.59 , 0.68 , 0.74 , 0.93 ] y_coords = [ 0.75 , 0.34 , 0.44 , 0.52 , 0.80 , 0.25 , 0.55 ]   fig = plt . figure ( figsize = ( 8 , 5 ) ) plt . scatter ( x_coords , y_coords , marker = 's' , s = 50 )   for x , y in zip ( x_coords , y_coords ) :      plt . annotate (          '(%s, %s)' % ( x , y ) ,          xy = ( x , y ) ,          xytext = ( 0 , - 10 ) ,          textcoords = 'offset points' ,          ha = 'center' ,          va = 'top' )   plt . xlim ( [ 0 , 1 ] ) plt . ylim ( [ 0 , 1 ] ) plt . show ( )
Python 中用 matplotlib 畫散列點 (Scatter)

用曲線把樣本分成兩類

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 # 2-category classification with random 2D-sample data # from a multivariate normal distribution   import numpy as np from matplotlib import pyplot as plt   def decision_boundary ( x_1 ) :      """ Calculates the x_2 value for plotting the decision boundary."""      return 4 - np . sqrt ( - x_1 * * 2 + 4 * x_1 + 6 + np . log ( 16 ) )   # Generating a Gaussion dataset: # creating random vectors from the multivariate normal distribution # given mean and covariance mu_vec1 = np . array ( [ 0 , 0 ] ) cov_mat1 = np . array ( [ [ 2 , 0 ] , [ 0 , 2 ] ] ) x1_samples = np . random . multivariate_normal ( mu_vec1 , cov_mat1 , 100 ) mu_vec1 = mu_vec1 . reshape ( 1 , 2 ) . T # to 1-col vector   mu_vec2 = np . array ( [ 1 , 2 ] ) cov_mat2 = np . array ( [ [ 1 , 0 ] , [ 0 , 1 ] ] ) x2_samples = np . random . multivariate_normal ( mu_vec2 , cov_mat2 , 100 ) mu_vec2 = mu_vec2 . reshape ( 1 , 2 ) . T # to 1-col vector   # Main scatter plot and plot annotation f , ax = plt . subplots ( figsize = ( 7 , 7 ) ) ax . scatter ( x1_samples [ : , 0 ] , x1_samples [ : , 1 ] , marker = 'o' , color = 'green' , s = 40 , alpha = 0.5 ) ax . scatter ( x2_samples [ : , 0 ] , x2_samples [ : , 1 ] , marker = '^' , color = 'blue' , s = 40 , alpha = 0.5 ) plt . legend ( [ 'Class1 (w1)' , 'Class2 (w2)' ] , loc = 'upper right' ) plt . title ( 'Densities of 2 classes with 25 bivariate random patterns each' ) plt . ylabel ( 'x2' ) plt . xlabel ( 'x1' ) ftext = 'p(x|w1) ~ N(mu1=(0,0)^t, cov1=I)np(x|w2) ~ N(mu2=(1,1)^t, cov2=I)' plt . figtext ( . 15 , . 8 , ftext , fontsize = 11 , ha = 'left' )   # Adding decision boundary to plot x_1 = np . arange ( - 5 , 5 , 0.1 ) bound = decision_boundary ( x_1 ) plt . plot ( x_1 , bound , 'r--' , lw = 3 )   x_vec = np . linspace ( * ax . get_xlim ( ) ) x_1 = np . arange ( 0 , 100 , 0.05 )   plt . show ( )
Python 中用 matplotlib 畫散列點 (Scatter)

按到原點的距離增大點的大小

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import numpy as np import matplotlib . pyplot as plt   fig = plt . figure ( figsize = ( 8 , 6 ) )   # Generating a Gaussion dataset: # creating random vectors from the multivariate normal distribution # given mean and covariance mu_vec1 = np . array ( [ 0 , 0 ] ) cov_mat1 = np . array ( [ [ 1 , 0 ] , [ 0 , 1 ] ] ) X = np . random . multivariate_normal ( mu_vec1 , cov_mat1 , 500 )   R = X * * 2 R_sum = R . sum ( axis = 1 ) plt . scatter ( X [ : , 0 ] , X [ : , 1 ] ,              color = 'gray' ,              marker = 'o' ,              s = 32. * R_sum ,              edgecolor = 'black' ,              alpha = 0.5 ) plt . show ( )
Python 中用 matplotlib 畫散列點 (Scatter)