1.概述
使用Matplotlib 绘图实现可视化时,会面临不同的需求有所调整,本文档重点对绘图过程中产生的一些小众需求进行全面总结,其他任务时可以随时即抽即用。
2.绘图
2.1 一般绘图
plt.figure() 参数设置说明
matplotlib.pyplot.figure(
figsize=None, # (float,float),画布尺寸 ,默认为6.4*4.8
dpi=None, # int 分辨率,默认为100
facecolor=None, #背景色,默认为白色('w')
edgecolor=None, # 边界颜色,默认为白色('w')
frameon=True, # 是否有边界,默认为True
clear=False, #是否对存在的画布进行清楚,默认为False(即自动创建新画布)
**kwargs)
通过命令设置:
plt.xlabel() → ax.set_xlabel()
plt.ylabel() → ax.set_ylabel()
plt.xlim() → ax.set_xlim()
plt.ylim() → ax.set_ylim()
plt.title() → ax.set_title()
plt.xticks→ ax.set_xticks()
plt.yticks→ ax.set_yticks()
plt.xticklabels→ ax.set_xticklabels()
plt.yticklabels→ ax.set_yticklabels()
ex:
a = [1,2,3,4,5]
labels = ['A', 'B', 'C', 'D','E']
plt.xticks(a,labels,rotation = 30)ax[0].set_yticks([0,5,10,15])
ax[0].set_yticklabels(['low','medium','high','very high'])
#设置刻度尺字体与倾斜角度
ax.tick_params(axis='x', labelsize=8, style='italic')
ax.set_xticklabels(ax.get_xticklabels(), rotation=45)
2.1.1 case 1
import matplotlib.pyplot as plt# Create a 2x2 grid of subplots
fig, axs = plt.subplots(2, 2)
# fig = plt.figure(figsize=(7, 5)) # 1000 x 900 像素(先宽度 后高度)# Now axs is a 2D array of Axes objects
axs[0, 0].plot([1, 2, 3], [4, 5, 6])
axs[0, 1].scatter([1, 2, 3], [4, 5, 6])
axs[1, 0].bar([1, 2, 3], [4, 5, 6])
axs[1, 1].hist([1, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 5])plt.show()
2.1.2 case 2
# importing packages
import numpy as np
import matplotlib.pyplot as plt# create data
x=np.array([1, 2, 3, 4, 5])# making subplots
fig, ax = plt.subplots(2, 2)# set data with subplots and plot
title = ["Linear", "Double", "Square", "Cube"]
y = [x, x*2, x*x, x*x*x]for i in range(4):# subplotsplt.subplot(2, 2, i+1) # plotting (x,y)plt.plot(x, y[i]) # set the title to subplotsplt.gca().set_title(title[i]) # set spacing
fig.tight_layout()
plt.show()
2.1.3 case 3
import matplotlib.pyplot as plt
import numpy as npfig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))x1 = [1, 2, 3, 4, 5, 6]
y1 = [45, 34, 30, 45, 50, 38]
y2 = [36, 28, 30, 40, 38, 48]labels = ["student 1", "student 2"]# Add title to subplot
fig.suptitle(' Student marks in different subjects ', fontsize=30)# Creating the sub-plots.
l1 = ax1.plot(x1, y1, 'o-', color='g')
l2 = ax2.plot(x1, y2, 'o-')fig.legend([l1, l2], labels=labels,loc="upper right")
plt.subplots_adjust(right=0.9)plt.show()
2.1.4 case 4
# importing required libraries
import matplotlib.pyplot as plt
from matplotlib import gridspec
import numpy as np# create a figure
fig = plt.figure()# to change size of subplot's
# set height of each subplot as 8
fig.set_figheight(8)# set width of each subplot as 8
fig.set_figwidth(8)# create grid for different subplots
spec = gridspec.GridSpec(ncols=2, nrows=2,width_ratios=[2, 1], wspace=0.5,hspace=0.5, height_ratios=[1, 2])# initializing x,y axis value
x = np.arange(0, 10, 0.1)
y = np.cos(x)# ax0 will take 0th position in
# geometry(Grid we created for subplots),
# as we defined the position as "spec[0]"
ax0 = fig.add_subplot(spec[0])
ax0.plot(x, y)# ax1 will take 0th position in
# geometry(Grid we created for subplots),
# as we defined the position as "spec[1]"
ax1 = fig.add_subplot(spec[1])
ax1.plot(x, y)# ax2 will take 0th position in
# geometry(Grid we created for subplots),
# as we defined the position as "spec[2]"
ax2 = fig.add_subplot(spec[2])
ax2.plot(x, y)# ax3 will take 0th position in
# geometry(Grid we created for subplots),
# as we defined the position as "spec[3]"
ax3 = fig.add_subplot(spec[3])
ax3.plot(x, y)# display the plots
plt.show()
2.1.5 case 5
# importing required library
import matplotlib.pyplot as plt
import numpy as np# creating grid for subplots
fig = plt.figure()
fig.set_figheight(6)
fig.set_figwidth(6)ax1 = plt.subplot2grid(shape=(3, 3), loc=(0, 0), colspan=3)
ax2 = plt.subplot2grid(shape=(3, 3), loc=(1, 0), colspan=1)
ax3 = plt.subplot2grid(shape=(3, 3), loc=(1, 2), rowspan=2)
ax4 = plt.subplot2grid((3, 3), (2, 0))
ax5 = plt.subplot2grid((3, 3), (2, 1), colspan=1)# initializing x,y axis value
x = np.arange(0, 10, 0.1)
y = np.cos(x)# plotting subplots
ax1.plot(x, y)
ax1.set_title('ax1')
ax2.plot(x, y)
ax2.set_title('ax2')
ax3.plot(x, y)
ax3.set_title('ax3')
ax4.plot(x, y)
ax4.set_title('ax4')
ax5.plot(x, y)
ax5.set_title('ax5')# automatically adjust padding horizontally
# as well as vertically.
plt.tight_layout()# display plot
plt.show()
2.1.6 case 6
# importing packages
import numpy as np
import matplotlib.pyplot as plt# create data
x=np.array([1, 2, 3, 4, 5])# making subplots
fig, ax = plt.subplots(2, 2)# set data with subplots and plot
ax[0, 0].plot(x, x)
ax[0, 1].plot(x, x*2)
ax[1, 0].plot(x, x*x)
ax[1, 1].plot(x, x*x*x)fig.tight_layout(pad=5.0)
plt.show()"""
# set the spacing between subplots
plt.subplot_tool()
plt.show()plt.subplots_adjust(left=0.1,bottom=0.1, right=0.9, top=0.9, wspace=0.4, hspace=0.4)
plt.show()# making subplots with constrained_layout=True
fig, ax = plt.subplots(2, 2, constrained_layout = True)# set data with subplots and plot
ax[0, 0].plot(x, x)
ax[0, 1].plot(x, x*2)
ax[1, 0].plot(x, x*x)
ax[1, 1].plot(x, x*x*x)
plt.show()
"""
2.1.7 case 7
import matplotlib.pyplot as plt
import numpy as np X = np.linspace(-np.pi, np.pi, 15)
C = np.cos(X)
S = np.sin(X) # [left, bottom, width, height]
ax = plt.axes([0.1, 0.1, 0.8, 0.8]) # 'bs:' mentions blue color, square
# marker with dotted line.
ax1 = ax.plot(X, C, 'bs:') #'ro-' mentions red color, circle
# marker with solid line.
ax2 = ax.plot(X, S, 'ro-') ax.legend(labels = ('Cosine Function', 'Sine Function'), loc = 'upper left') ax.set_title("Trigonometric Functions") plt.show()
2.1.8 case 8
# importing library
import matplotlib.pyplot as plt# giving values for x and y to plot
student_marks = [50, 60, 70, 80, 90]
student_grade = ['B', 'B', 'B+', 'B+', 'A']
plt.plot(student_marks, student_grade)# Giving x label using xlabel() method
# with bold setting
plt.xlabel("student_marks", fontweight='bold')
ax = plt.axes()# Setting the background color of the plot
# using set_facecolor() method
ax.set_facecolor("yellow")# Giving y label using xlabel() method
# with bold setting
plt.ylabel("student_grade", fontweight='bold')# Giving title to the plot
plt.title("Student Marks v/s Student Grade")# Showing the plot using plt.show()
plt.show()
2.1.9 case 9
# importing libraries
import matplotlib.pyplot as plt
import numpy as np# giving values for x and y to plot
x = np.arange(0, 10, .1)
y = np.sin(x)# Set background color of the outer
# area of the plt
plt.figure(facecolor='yellow')# Plotting the graph between x and y
plt.plot(x, y)# Giving x label using xlabel() method
# with bold setting
plt.xlabel("X")
ax = plt.axes()# Setting the background color of the plot
# using set_facecolor() method
ax.set_facecolor("violet")# Giving y label using xlabel() method with
# bold setting
plt.ylabel('sin(x)')# Showing the plot using plt.show()
plt.show()
2.1.10 case 10
# Code to add text on matplotlib# Importing library
import matplotlib.pyplot as plt# Creating x-value and y-value of data
x = [1, 2, 3, 4, 5]
y = [5, 8, 4, 7, 5]# Creating figure
fig = plt.figure()# Adding axes on the figure
ax = fig.add_subplot(111)# Plotting data on the axes
ax.plot(x, y)# Adding title
ax.set_title('Day v/s No of Questions on GFG', fontsize=15)# Adding axis title
ax.set_xlabel('Day', fontsize=12)
ax.set_ylabel('No of Questions', fontsize=12)# Setting axis limits
ax.axis([0, 10, 0, 15])# Adding text on the plot.
ax.text(1, 13, 'Practice on GFG', style='italic', bbox={'facecolor': 'green', 'alpha': 0.5, 'pad': 10})# Adding text without box on the plot.
ax.text(8, 13, 'December', style='italic')# Adding annotation on the plot.
ax.annotate('Peak', xy=(2, 8), xytext=(4, 10), fontsize=12,arrowprops=dict(facecolor='green', shrink=0.05))plt.show()
2.1.11 case 11
# importing libraries
""" How to change Matplotlib color bar size """
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable fig, ax = plt.subplots()
# Reading image from folder img = mpimg.imread(r'img.jpg')
image = plt.imshow(img) # Locating current axes
divider = make_axes_locatable(ax) # creating new axes on the right
# side of current axes(ax).
# The width of cax will be 5% of ax
# and the padding between cax and ax
# will be fixed at 0.05 inch.
colorbar_axes = divider.append_axes("right", size="10%", pad=0.1)
# Using new axes for colorbar
plt.colorbar(image, cax=colorbar_axes)
plt.show()
2.2.12 case 12
from scipy import signal
import matplotlib.pyplot as plot
import numpy as np
# %matplotlib inline # Plot the square wave
t = np.linspace(0, 1, 1000, endpoint=True)
plot.plot(t, signal.square(2 * np.pi * 5 * t)) # Change the x, y axis label to "Brush Script MT" font style.
plot.xlabel("Time (Seconds)", fontname="Brush Script MT", fontsize=18)
plot.ylabel("Amplitude", fontname="Brush Script MT", fontsize=18) plot.show()
2.2.13 case 13
import matplotlib.pyplot as plot x = [1, 2, 3, 4, 5, 6]
y = [0, 2, 4, 6, 8, 10] # plotting a plot
plot.plot(x, y) # Change the x, y axis label to 'Gabriola' style.
plot.xlabel("Years", fontname="Gabriola", fontsize=18)
plot.ylabel("Population (million)", fontname="Gabriola", fontsize=18) # Set the title to 'Franklin Gothic Medium' style.
plot.title("Line Graph - Geeksforgeeks", fontname='Franklin Gothic Medium', fontsize=18) plot.show()
2.1.14 case 14
import matplotlib.pyplot as plt# Sample data
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]# Create a line chart
plt.figure(figsize=(8, 6))
plt.plot(x, y, marker='o', linestyle='-')# Add annotations
for i, (xi, yi) in enumerate(zip(x, y)):plt.annotate(f'({xi}, {yi})', (xi, yi), textcoords="offset points", xytext=(0, 10), ha='center')# Add title and labels
plt.title('Line Chart with Annotations')
plt.xlabel('X-axis Label')
plt.ylabel('Y-axis Label')# Display grid
plt.grid(True)# Show the plot
plt.show()
2.1.15 case 15
import matplotlib.pyplot as plt
import numpy as npx = np.array([1, 2, 3, 4])
y = x*2plt.plot(x, y)x1 = [2, 4, 6, 8]
y1 = [3, 5, 7, 9]plt.plot(x, y1, '-.')
plt.xlabel("X-axis data")
plt.ylabel("Y-axis data")
plt.title('multiple plots')plt.fill_between(x, y, y1, color='green', alpha=0.5)
plt.show()
2.1.16 case 16
# importing required libraries
import numpy as np
import pandas as pd
import chart_studio.plotly as pl
import plotly.offline as po
import cufflinks as cf
po.init_notebook_mode(connected = True)
cf.go_offline()# define a function for creating
# data set for plotting graph
def createdata(data):# creating random data setif(data == 1):x = np.random.rand(100,5) df1 = pd.DataFrame(x, columns = ['A', 'B','C', 'D','E'])# creating user data set with inputelif(data == 2): x = [0, 0, 0, 0, 0]r1 = [0, 0, 0, 0, 0]r2 = [0, 0, 0, 0, 0]r3 = [0, 0, 0, 0, 0]r4 = [0, 0, 0, 0, 0]print('Enter the values for columns')i = 0for i in [0, 1, 2, 3, 4]:x[i] = input()i = i + 1print('Enter the values for first row')i = 0for i in [0, 1, 2, 3, 4]:r1[i] = int(input())i = i + 1print('Enter the values for second row')i = 0for i in [0, 1, 2, 3, 4]:r2[i] = int(input())i = i + 1print('Enter the values for third row')i = 0for i in [0, 1, 2, 3, 4]:r3[i] = int(input())i = i + 1print('Enter the values for fourth row')i = 0for i in [0, 1, 2, 3, 4]:r4[i] = int(input())i = i + 1df1 = pd.DataFrame([r1,r2,r3,r4] , columns = x)# creating data set by csv file elif(data == 3): file = input('Enter the file name')x = pd.read_csv(file)df1 = pd.DataFrame(x)else:print('DataFrame creation failed please' +'enter in between 1 to 3 and try again')return df1# define a function for
# types of plotters
def plotter(plot):if(plot == 1):finalplot = df1.iplot(kind = 'scatter')elif(plot == 2):finalplot = df1.iplot(kind = 'scatter', mode = 'markers',symbol = 'x', colorscale = 'paired')elif(plot == 3):finalplot = df1.iplot(kind = 'bar')elif(plot == 4):finalplot = df1.iplot(kind = 'hist')elif(plot == 5):finalplot = df1.iplot(kind = 'box')elif(plot == 6):finalplot = df1.iplot(kind = 'surface')else:finalplot = print('Select only between 1 to 7')return finalplot# define a function for allowing
# to plot for specific rows and columns
def plotter2(plot): col = input('Enter the number of columns you' +'want to plot by selecting only 1 , 2 or 3')col = int(col)if(col==1):colm = input('Enter the column you want to plot' +'by selecting any column from dataframe head')if(plot == 1):finalplot = df1[colm].iplot(kind = 'scatter')elif(plot == 2):finalplot = df1[colm].iplot(kind = 'scatter', mode = 'markers',symbol = 'x', colorscale = 'paired')elif(plot == 3):finalplot = df1[colm].iplot(kind = 'bar')elif(plot == 4):finalplot = df1[colm].iplot(kind = 'hist')elif(plot == 5):finalplot = df1[colm].iplot(kind = 'box')elif(plot == 6 or plot == 7):finalplot = print('Bubble plot and surface plot require' +'more than one column arguments')else:finalplot = print('Select only between 1 to 7')elif(col == 2):print('Enter the columns you want to plot' +'by selecting from dataframe head')x = input('First column')y = input('Second column')if(plot == 1):finalplot = df1[[x,y]].iplot(kind = 'scatter')elif(plot == 2):finalplot = df1[[x,y]].iplot(kind = 'scatter', mode = 'markers', symbol = 'x', colorscale = 'paired')elif(plot == 3):finalplot = df1[[x,y]].iplot(kind = 'bar')elif(plot == 4):finalplot = df1[[x,y]].iplot(kind = 'hist')elif(plot == 5):finalplot = df1[[x,y]].iplot(kind = 'box')elif(plot == 6):finalplot = df1[[x,y]].iplot(kind = 'surface')elif(plot == 7):size = input('Please enter the size column for bubble plot')finalplot = df1.iplot(kind = 'bubble', x = x,y = y, size = size)else:finalplot = print('Select only between 1 to 7')elif(col == 3):print('Enter the columns you want to plot')x = input('First column')y = input('Second column')z = input('Third column')if(plot == 1):finalplot = df1[[x,y,z]].iplot(kind = 'scatter')elif(plot == 2):finalplot = df1[[x,y,z]].iplot(kind = 'scatter', mode = 'markers',symbol = 'x' ,colorscale = 'paired')elif(plot == 3):finalplot = df1[[x,y,z]].iplot(kind = 'bar')elif(plot == 4):finalplot = df1[[x,y,z]].iplot(kind = 'hist')elif(plot == 5):finalplot = df1[[x,y,z]].iplot(kind = 'box')elif(plot == 6):finalplot = df1[[x,y,z]].iplot(kind = 'surface')elif(plot == 7):size = input('Please enter the size column for bubble plot')finalplot = df1.iplot(kind = 'bubble', x = x, y = y, z = z, size = size )else:finalplot = print('Select only between 1 to 7')else:finalplot = print('Please enter only 1 , 2 or 3')return finalplot# define a main function
# for asking type of plot
# and calling respective function
def main(cat): if(cat == 1):print('Select the type of plot you need to plot by writing 1 to 6')print('1.Line plot')print('2.Scatter plot')print('3.Bar plot')print('4.Histogram')print('5.Box plot')print('6.Surface plot')plot = int(input())output = plotter(plot)elif(cat == 2):print('Select the type of plot you need to plot by writing 1 to 7')print('1.Line plot')print('2.Scatter plot')print('3.Bar plot')print('4.Histogram')print('5.Box plot')print('6.Surface plot')print('7.Bubble plot')plot = int(input())output = plotter2(plot)else:print('Please enter 1 or 2 and try again') print('Select the type of data you need to plot(By writing 1,2 or 3)')
print('1.Random data with 100 rows and 5 columns')
print('2.Customize dataframe with 5 columns and. 4 rows')
print('3.Upload csv/json/txt file')data = int(input())
df1 = createdata(data)
print('Your DataFrame head is given below check the columns to plot using cufflinks')df1.head()
print('What kind of plot you need , the complete data plot or columns plot')
cat = input('Press 1 for plotting all columns or press 2 for specifying columns to plot')
cat = int(cat)main(cat)
2.2 line chart
2.2.1 case 1
# importing package
import matplotlib.pyplot as plt
import numpy as np # create data
x = [1,2,3,4,5]
y = [3,3,3,3,3] # plot lines
plt.plot(x, y, label = "line 1", linestyle="-")
plt.plot(y, x, label = "line 2", linestyle="--")
plt.plot(x, np.sin(x), label = "curve 1", linestyle="-.")
plt.plot(x, np.cos(x), label = "curve 2", linestyle=":")
plt.legend()
plt.show()
2.2.2 case 2
# importing module
import matplotlib.pyplot as plt # assigning x and y coordinates
x = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
y = [] for i in range(len(x)): y.append(max(0, x[i])) # depicting the visualization
plt.plot(x, y, color='green', alpha=0.75)
plt.xlabel('x')
plt.ylabel('y') # displaying the title
plt.title(label="ReLU function graph", fontsize=40, color="green")
2.2.3 case 3
# importing modules
from matplotlib import pyplot
import numpy # assigning time values of the signal
# initial time period, final time period
# and phase angle
signalTime = numpy.arange(0, 100, 0.5) # getting the amplitude of the signal
signalAmplitude = numpy.sin(signalTime) # depicting the visualization
pyplot.plot(signalTime, signalAmplitude, color='green', alpha=0.1) pyplot.xlabel('Time')
pyplot.ylabel('Amplitude') # displaying the title
pyplot.title("Signal", loc='right', rotation=45)
2.2.4 case 4
# importing module
import matplotlib.pyplot as plt # assigning x and y coordinates
z = [i for i in range(0, 6)] for i in range(0, 11, 2): # depicting the visualization plt.plot(z, z, color='green', alpha=i/10) plt.xlabel('x') plt.ylabel('y') # displaying the title print('\nIllustration with alpha =', i/10) plt.show()
2.3 bar chart
2.3.1 case 1
# importing package
import matplotlib.pyplot as plt
import numpy as np# create data
x = ['A', 'B', 'C', 'D']
y1 = np.array([10, 20, 10, 30])
y2 = np.array([20, 25, 15, 25])
y3 = np.array([12, 15, 19, 6])
y4 = np.array([10, 29, 13, 19])# plot bars in stack manner
plt.bar(x, y1, color='r')
plt.bar(x, y2, bottom=y1, color='b')
plt.bar(x, y3, bottom=y1+y2, color='y')
plt.bar(x, y4, bottom=y1+y2+y3, color='g')
plt.xlabel("Teams")
plt.ylabel("Score")
plt.legend(["Round 1", "Round 2", "Round 3", "Round 4"])
plt.title("Scores by Teams in 4 Rounds")
plt.show()
2.3.2 case 2
import matplotlib.pyplot as plt
import pandas as pd# Reading the tips.csv file
data = pd.read_csv('tips.csv')# initializing the data
x = data['day']
y = data['total_bill']# plotting the data
plt.bar(x, y, color='green', edgecolor='blue', linewidth=2)# Adding title to the plot
plt.title("Tips Dataset")# Adding label on the y-axis
plt.ylabel('Total Bill')# Adding label on the x-axis
plt.xlabel('Day')plt.show()
2.3.3 case 3
# importing package
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd# create data
df = pd.DataFrame([['A', 10, 20, 10, 26], ['B', 20, 25, 15, 21], ['C', 12, 15, 19, 6],['D', 10, 18, 11, 19]],columns=['Team', 'Round 1', 'Round 2', 'Round 3', 'Round 4'])
# view data
print(df)# plot data in stack manner of bar type
df.plot(x='Team', kind='bar', stacked=True,title='Stacked Bar Graph by dataframe')
plt.show()
2.3.4 case 4
# importing packages
import pandas as pd
import matplotlib.pyplot as plt # load dataset
df = pd.read_excel("Hours.xlsx") # view dataset
print(df) # plot a Stacked Bar Chart using matplotlib
df.plot( x = 'Name', kind = 'barh', stacked = True, title = 'Stacked Bar Graph', mark_right = True)
2.3.5 case 5
# importing packages
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt # load dataset
df = pd.read_excel("Hours.xlsx") # view dataset
print(df) # plot a Stacked Bar Chart using matplotlib
df.plot(
x = 'Name',
kind = 'barh',
stacked = True,
title = 'Percentage Stacked Bar Graph',
mark_right = True) df_total = df["Studied"] + df["Slept"] + df["Other"]
df_rel = df[df.columns[1:]].div(df_total, 0)*100for n in df_rel: for i, (cs, ab, pc) in enumerate(zip(df.iloc[:, 1:].cumsum(1)[n], df[n], df_rel[n])): plt.text(cs - ab / 2, i, str(np.round(pc, 1)) + '%', va = 'center', ha = 'center')
2.3.6 cae 6
# importing packages
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt # load dataset
df = pd.read_xlsx("Hours.xlsx") # view dataset
print(df) # plot a Stacked Bar Chart using matplotlib
df.plot(
x = 'Name',
kind = 'barh',
stacked = True,
title = 'Percentage Stacked Bar Graph',
mark_right = True) df_total = df["Studied"] + df["Slept"] + df["Other"]
df_rel = df[df.columns[1:]].div(df_total, 0) * 100for n in df_rel: for i, (cs, ab, pc) in enumerate(zip(df.iloc[:, 1:].cumsum(1)[n], df[n], df_rel[n])): plt.text(cs - ab / 2, i, str(np.round(pc, 1)) + '%', va = 'center', ha = 'center', rotation = 20, fontsize = 8)
2.3.7 case 7
# import packages
import numpy as np
import matplotlib.pyplot as plt# create data
A = np.array([3,6,9,4,2,5])
B = np.array([2,8,1,9,7,3])
X = np.arange(6)# plot the bars
plt.barh(X, A, align='center',alpha=0.9, color = 'y')plt.barh(X, -B, align='center', alpha=0.6, color = 'c')plt.grid()
plt.title("Back-to-Back Bar Chart")
plt.ylabel("Indexes")
plt.xlabel("Values")
plt.show()
2.3.8 case 8
# import packages
import numpy as np
import matplotlib.pyplot as plt# create data
A = np.array([3,6,9,4,2,5])
X = np.arange(6)# plot the bars
plt.bar(X, A, color = 'r')
plt.bar(X, -A, color = 'b')
plt.title("Back-to-Back Bar Chart")
plt.show()
2.3.9 case 9
import pandas as pd
from matplotlib import pyplot as plt# Read CSV into pandas
data = pd.read_csv(r"cars.csv")
data.head()
df = pd.DataFrame(data)name = df['car'].head(12)
price = df['price'].head(12)# Figure Size
fig, ax = plt.subplots(figsize =(16, 9))# Horizontal Bar Plot
ax.barh(name, price)# Remove axes splines
for s in ['top', 'bottom', 'left', 'right']:ax.spines[s].set_visible(False)# Remove x, y Ticks
ax.xaxis.set_ticks_position('none')
ax.yaxis.set_ticks_position('none')# Add padding between axes and labels
ax.xaxis.set_tick_params(pad = 5)
ax.yaxis.set_tick_params(pad = 10)# Add x, y gridlines
ax.grid(b = True, color ='grey',linestyle ='-.', linewidth = 0.5,alpha = 0.2)# Show top values
ax.invert_yaxis()# Add annotation to bars
for i in ax.patches:plt.text(i.get_width()+0.2, i.get_y()+0.5, str(round((i.get_width()), 2)),fontsize = 10, fontweight ='bold',color ='grey')# Add Plot Title
ax.set_title('Sports car and their price in crore',loc ='left', )# Add Text watermark
fig.text(0.9, 0.15, 'Jeeteshgavande30', fontsize = 12,color ='grey', ha ='right', va ='bottom',alpha = 0.7)# Show Plot
plt.show()
2.3.10 case 10
import numpy as np
import matplotlib.pyplot as plt # set width of bar
barWidth = 0.25
fig = plt.subplots(figsize =(12, 8)) # set height of bar
IT = [12, 30, 1, 8, 22]
ECE = [28, 6, 16, 5, 10]
CSE = [29, 3, 24, 25, 17] # Set position of bar on X axis
br1 = np.arange(len(IT))
br2 = [x + barWidth for x in br1]
br3 = [x + barWidth for x in br2] # Make the plot
plt.bar(br1, IT, color ='r', width = barWidth, edgecolor ='grey', label ='IT')
plt.bar(br2, ECE, color ='g', width = barWidth, edgecolor ='grey', label ='ECE')
plt.bar(br3, CSE, color ='b', width = barWidth, edgecolor ='grey', label ='CSE') # Adding Xticks
plt.xlabel('Branch', fontweight ='bold', fontsize = 15)
plt.ylabel('Students passed', fontweight ='bold', fontsize = 15)
plt.xticks([r + barWidth for r in range(len(IT))], ['2015', '2016', '2017', '2018', '2019'])plt.legend()
plt.show()
2.3.11 case 11
import numpy as np
import matplotlib.pyplot as pltN = 5boys = (20, 35, 30, 35, 27)
girls = (25, 32, 34, 20, 25)
boyStd = (2, 3, 4, 1, 2)
girlStd = (3, 5, 2, 3, 3)
ind = np.arange(N)
width = 0.35fig = plt.subplots(figsize =(10, 7))
p1 = plt.bar(ind, boys, width, yerr = boyStd)
p2 = plt.bar(ind, girls, width,bottom = boys, yerr = girlStd)plt.ylabel('Contribution')
plt.title('Contribution by the teams')
plt.xticks(ind, ('T1', 'T2', 'T3', 'T4', 'T5'))
plt.yticks(np.arange(0, 81, 10))
plt.legend((p1[0], p2[0]), ('boys', 'girls'))plt.show()
2.3.12 case 12
import os
import numpy as np
import matplotlib.pyplot as pltx = [0, 1, 2, 3, 4, 5, 6, 7]
y = [160, 167, 17, 130, 120, 40, 105, 70]
fig, ax = plt.subplots()
width = 0.75
ind = np.arange(len(y))ax.barh(ind, y, width, color = "green")for i, v in enumerate(y):ax.text(v + 3, i + .25, str(v), color = 'blue', fontweight = 'bold')
plt.show()
2.4 hist chart
2.4.1 case 1
# importing pyplot for getting graph
import matplotlib.pyplot as plt# importing numpy for getting array
import numpy as np# importing scientific python
from scipy import stats# list of values
x = [10, 40, 20, 10, 30, 10, 56, 45]res = stats.cumfreq(x, numbins=4,defaultreallimits=(1.5, 5))# generating random values
rng = np.random.RandomState(seed=12345)# normalizing
samples = stats.norm.rvs(size=1000,random_state=rng)res = stats.cumfreq(samples,numbins=25)x = res.lowerlimit + np.linspace(0, res.binsize*res.cumcount.size,res.cumcount.size)# specifying figure size
fig = plt.figure(figsize=(10, 4))# adding sub plots
ax1 = fig.add_subplot(1, 2, 1)# adding sub plots
ax2 = fig.add_subplot(1, 2, 2)# getting histogram using hist function
ax1.hist(samples, bins=25,color="green")# setting up the title
ax1.set_title('Histogram')# cumulative graph
ax2.bar(x, res.cumcount, width=4, color="blue")# setting up the title
ax2.set_title('Cumulative histogram')ax2.set_xlim([x.min(), x.max()])# display the figure(histogram)
plt.show()
2.4.2 case 2
import matplotlib.pyplot as plt
import pandas as pd# Reading the tips.csv file
data = pd.read_csv('tips.csv')# initializing the data
x = data['total_bill']# plotting the data
plt.hist(x, bins=25, color='green', edgecolor='blue',linestyle='--', alpha=0.5)# Adding title to the plot
plt.title("Tips Dataset")# Adding label on the y-axis
plt.ylabel('Frequency')# Adding label on the x-axis
plt.xlabel('Total Bill')plt.show()
2.4.3 case 3
# importing libraries
import matplotlib.pyplot as plt# giving two age groups data
age_g1 = [1, 3, 5, 10, 15, 17, 18, 16, 19,21, 23, 28, 30, 31, 33, 38, 32, 40, 45, 43, 49, 55, 53, 63, 66, 85, 80, 57, 75, 93, 95]age_g2 = [6, 4, 15, 17, 19, 21, 28, 23, 31, 36, 39, 32, 50, 56, 59, 74, 79, 34, 98, 97, 95, 67, 69, 92, 45, 55, 77,76, 85]# plotting first histogram
plt.hist(age_g1, label='Age group1', bins=14, alpha=.7, edgecolor='red')# plotting second histogram
plt.hist(age_g2, label="Age group2", bins=14, alpha=.7, edgecolor='yellow')
plt.legend()# Showing the plot using plt.show()
plt.show()
2.4.4 case 4
# importing libraries
import matplotlib.pyplot as plt# giving two age groups data
age_g1 = [1, 3, 5, 10, 15, 17, 18, 16, 19, 21,23, 28, 30, 31, 33, 38, 32, 40, 45, 43, 49, 55, 53, 63, 66, 85, 80, 57, 75, 93, 95]age_g2 = [6, 4, 15, 17, 19, 21, 28, 23, 31, 36,39, 32, 50, 56, 59, 74, 79, 34, 98, 97,95, 67, 69, 92, 45, 55, 77, 76, 85]# plotting first histogram
plt.hist(age_g1, label='Age group1', alpha=.7, color='red')# plotting second histogram
plt.hist(age_g2, label="Age group2", alpha=.5,edgecolor='black', color='yellow')
plt.legend()# Showing the plot using plt.show()
plt.show()
2.4.5 case 5
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np# Generate random data for the histogram
data = np.random.randn(1000)# Creating a customized histogram with a density plot
sns.histplot(data, bins=30, kde=True, color='lightgreen', edgecolor='red')# Adding labels and title
plt.xlabel('Values')
plt.ylabel('Density')
plt.title('Customized Histogram with Density Plot')# Display the plot
plt.show()
2.4.6 case 6
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import colors
from matplotlib.ticker import PercentFormatter# Creating dataset
np.random.seed(23685752)
N_points = 10000
n_bins = 20# Creating distribution
x = np.random.randn(N_points)
y = .8 ** x + np.random.randn(10000) + 25
legend = ['distribution']# Creating histogram
fig, axs = plt.subplots(1, 1,figsize =(10, 7), tight_layout = True)# Remove axes splines
for s in ['top', 'bottom', 'left', 'right']: axs.spines[s].set_visible(False) # Remove x, y ticks
axs.xaxis.set_ticks_position('none')
axs.yaxis.set_ticks_position('none') # Add padding between axes and labels
axs.xaxis.set_tick_params(pad = 5)
axs.yaxis.set_tick_params(pad = 10) # Add x, y gridlines
axs.grid(b = True, color ='grey', linestyle ='-.', linewidth = 0.5, alpha = 0.6) # Add Text watermark
fig.text(0.9, 0.15, 'Jeeteshgavande30', fontsize = 12, color ='red',ha ='right',va ='bottom', alpha = 0.7) # Creating histogram
N, bins, patches = axs.hist(x, bins = n_bins)# Setting color
fracs = ((N**(1 / 5)) / N.max())
norm = colors.Normalize(fracs.min(), fracs.max())for thisfrac, thispatch in zip(fracs, patches):color = plt.cm.viridis(norm(thisfrac))thispatch.set_facecolor(color)# Adding extra features
plt.xlabel("X-axis")
plt.ylabel("y-axis")
plt.legend(legend)
plt.title('Customized histogram')# Show plot
plt.show()
2.4.7 case 7
import matplotlib.pyplot as plt
import numpy as np# Generate random data for stacked histograms
data1 = np.random.randn(1000)
data2 = np.random.normal(loc=3, scale=1, size=1000)# Creating a stacked histogram
plt.hist([data1, data2], bins=30, stacked=True, color=['cyan', 'Purple'], edgecolor='black')# Adding labels and title
plt.xlabel('Values')
plt.ylabel('Frequency')
plt.title('Stacked Histogram')# Adding legend
plt.legend(['Dataset 1', 'Dataset 2'])# Display the plot
plt.show()
2.4.8 case 8
import matplotlib.pyplot as plt
import numpy as np# Generate random 2D data for hexbin plot
x = np.random.randn(1000)
y = 2 * x + np.random.normal(size=1000)# Creating a 2D histogram (hexbin plot)
plt.hexbin(x, y, gridsize=30, cmap='Blues')# Adding labels and title
plt.xlabel('X values')
plt.ylabel('Y values')
plt.title('2D Histogram (Hexbin Plot)')# Adding colorbar
plt.colorbar()# Display the plot
plt.show()
2.4.9 case 9
# importing matplotlib
import matplotlib.pyplot as plt# Storing set of values in
# x, height, error and colors for plotting the graph
x= range(4)
height=[ 3, 6, 5, 4]
error=[ 1, 5, 3, 2]
colors = ['red', 'green', 'blue', 'black']# using tuple unpacking
# to grab fig and axes
fig, ax = plt.subplots()# plotting the bar plot
ax.bar( x, height, alpha = 0.1)# Zip function acts as an
# iterator for tuples so that
# we are iterating through
# each set of values in a loop
for pos, y, err, colors in zip(x, height, error, colors):ax.errorbar(pos, y, err, lw = 2,capsize = 4, capthick = 4, color = colors)# Showing the plotted error bar
# plot with different color
plt.show()
2.4.10 case 10
# importing matplotlib package
import matplotlib.pyplot as plt# importing the numpy package
import numpy as np# Storing set of values in
# names, x, height,
# error and colors for plotting the graph
names= ['Bijon', 'Sujit', 'Sayan', 'Saikat']
x=np.arange(4)
marks=[ 60, 90, 55, 46]
error=[ 11, 15, 5, 9]
colors = ['red', 'green', 'blue', 'black']# using tuple unpacking
# to grab fig and axes
fig, ax = plt.subplots()# plotting the bar plot
ax.bar(x, marks, alpha = 0.5,color = colors)# Zip function acts as an
# iterator for tuples so that
# we are iterating through
# each set of values in a loop
for pos, y, err, colors in zip(x, marks,error, colors):ax.errorbar(pos, y, err, lw = 2,capsize = 4, capthick = 4,color = colors)# Showing the plotted error bar
# plot with different color
ax.set_ylabel('Marks of the Students')# Using x_ticks and x_labels
# to set the name of the
# students at each point
ax.set_xticks(x)
ax.set_xticklabels(names)
ax.set_xlabel('Name of the students')# Showing the plot
plt.show()
2.4.11 case 11
# importing matplotlib
import matplotlib.pyplot as plt# importing the numpy package
import numpy as np# Storing set of values in
# names, x, height, error,
# error1 and colors for plotting the graph
names= ['USA', 'India', 'England', 'China']
x=np.arange(4)
economy=[21.43, 2.87, 2.83, 14.34]
error=[1.4, 1.5, 0.5, 1.9]
error1=[0.5, 0.2, 0.6, 1]
colors = ['red', 'grey', 'blue', 'magenta']# using tuple unpacking
# to grab fig and axes
fig, ax = plt.subplots()# plotting the bar plot
ax.bar(x, economy, alpha = 0.5,color = colors)# Zip function acts as an
# iterator for tuples so that
# we are iterating through
# each set of values in a loop
for pos, y, err,err1, colors in zip(x, economy,error, error1, colors):ax.errorbar(pos, y, err, err1, fmt = 'o',lw = 2, capsize = 4, capthick = 4,color = colors)# Showing the plotted error bar
# plot with different color
ax.set_ylabel('Economy(in trillions)')# Using x_ticks and x_labels
# to set the name of the
# countries at each point
ax.set_xticks(x)
ax.set_xticklabels(names)
ax.set_xlabel('Name of the countries')# Showing the plot
plt.show()
2.5 scatter chart
2.5.1 case 1
import matplotlib.pyplot as plt
import pandas as pd# Reading the tips.csv file
data = pd.read_csv('tips.csv')# initializing the data
x = data['day']
y = data['total_bill']# plotting the data
plt.scatter(x, y, c=data['size'], s=data['total_bill'],marker='D', alpha=0.5)# Adding title to the plot
plt.title("Tips Dataset")# Adding label on the y-axis
plt.ylabel('Total Bill')# Adding label on the x-axis
plt.xlabel('Day')plt.show()
2.5.2 case 2
import matplotlib.pyplot as plt plt.style.use('seaborn')
plt.figure(figsize=(10, 10)) x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [3*i+2 for i in x]
size = [n*100 for n in range(1, len(x)+1)]
# print(size) plt.scatter(x, y, s=size, c='g')
plt.title("Scatter Plot with increase in size of scatter points ", fontsize=22) plt.xlabel('X-axis', fontsize=20)
plt.ylabel('Y-axis', fontsize=20) plt.xticks(x, fontsize=12)
plt.yticks(y, fontsize=12) plt.show()
2.6 pie chart
2.6.1 case 1
import matplotlib.pyplot as plt years = [2016, 2017, 2018, 2019, 2020]
profit = [15, 19, 35, 14, 17] # Plotting the pie chart
plt.pie(profit, labels = years, autopct = '%1.1f%%', startangle = 90, wedgeprops = {"edgecolor" : "black", 'linewidth': 2, 'antialiased': True}) # Equal aspect ratio ensures
# that pie is drawn as a circle.
plt.axis('equal') # Display the graph onto the screen
plt.show()
2.6.2 case 2
import matplotlib.pyplot as plt # the slices are ordered and
# plotted counter-clockwise:
product = 'Product A', 'Product B', 'Product C', 'Product D'stock = [15, 30, 35, 20]
explode = (0.1, 0, 0.1, 0) plt.pie(stock, explode = explode, labels = product, autopct = '%1.1f%%', shadow = True, startangle = 90, wedgeprops= {"edgecolor":"black", 'linewidth': 3, 'antialiased': True}) # Equal aspect ratio ensures that
# pie is drawn as a circle.
plt.axis('equal') plt.show()
2.6.3 case 3
import matplotlib.pyplot as plt # the slices are ordered and
# plotted counter-clockwise:
continents = ['Asia', 'Europe', 'North America', 'South America','Australia', 'Africa','Antarctica'] area = [25, 20, 15, 10,15,10,5]
explode = (0.1, 0, 0.1, 0,0.1,0.1,0.1) plt.pie(area, explode = explode, labels = continents, autopct = '%1.1f%%',startangle = 0, wedgeprops = {"edgecolor" : "black", 'linewidth' : 2, 'antialiased': True}) # Equal aspect ratio ensures
# that pie is drawn as a circle.
plt.axis('equal') plt.show()
2.7 3D graph
2.7.1 case 1
# Import libraries
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt# Creating dataset
z = np.random.randint(100, size =(50))
x = np.random.randint(80, size =(50))
y = np.random.randint(60, size =(50))# Creating figure
fig = plt.figure(figsize = (10, 7))
ax = plt.axes(projection ="3d")# Creating plot
ax.scatter3D(x, y, z, color = "green")
plt.title("simple 3D scatter plot")# show plot
plt.show()
2.7.2 case 2
# Import libraries
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt# Creating dataset
z = 4 * np.tan(np.random.randint(10, size =(500))) + np.random.randint(100, size =(500))
x = 4 * np.cos(z) + np.random.normal(size = 500)
y = 4 * np.sin(z) + 4 * np.random.normal(size = 500)# Creating figure
fig = plt.figure(figsize = (16, 9))
ax = plt.axes(projection ="3d")# Add x, y gridlines
ax.grid(b = True, color ='grey', linestyle ='-.', linewidth = 0.3, alpha = 0.2) # Creating color map
my_cmap = plt.get_cmap('hsv')# Creating plot
sctt = ax.scatter3D(x, y, z,alpha = 0.8,c = (x + y + z), cmap = my_cmap, marker ='^')plt.title("simple 3D scatter plot")
ax.set_xlabel('X-axis', fontweight ='bold')
ax.set_ylabel('Y-axis', fontweight ='bold')
ax.set_zlabel('Z-axis', fontweight ='bold')
fig.colorbar(sctt, ax = ax, shrink = 0.5, aspect = 5)# show plot
plt.show()
2.7.3 case 3
# Import libraries
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt# Creating dataset
x = np.outer(np.linspace(-3, 3, 32), np.ones(32))
y = x.copy().T # transpose
z = (np.sin(x **2) + np.cos(y **2) )# Creating figure
fig = plt.figure(figsize =(14, 9))
ax = plt.axes(projection ='3d')# Creating plot
ax.plot_surface(x, y, z)# show plot
plt.show()
2.7.4 case 4
# Import libraries
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt# Creating dataset
x = np.outer(np.linspace(-3, 3, 32), np.ones(32))
y = x.copy().T # transpose
z = (np.sin(x **2) + np.cos(y **2) )# Creating figure
fig = plt.figure(figsize =(14, 9))
ax = plt.axes(projection ='3d')# Creating color map
my_cmap = plt.get_cmap('hot')# Creating plot
surf = ax.plot_surface(x, y, z,cmap = my_cmap,edgecolor ='none')fig.colorbar(surf, ax = ax,shrink = 0.5, aspect = 5)ax.set_title('Surface plot')# show plot
plt.show()
2.7.5 case 5
# Import libraries
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt# Creating dataset
x = np.outer(np.linspace(-3, 3, 32), np.ones(32))
y = x.copy().T # transpose
z = (np.sin(x **2) + np.cos(y **2) )# Creating figure
fig = plt.figure(figsize =(14, 9))
ax = plt.axes(projection ='3d')# Creating color map
my_cmap = plt.get_cmap('hot')# Creating plot
surf = ax.plot_surface(x, y, z, rstride = 8,cstride = 8,alpha = 0.8,cmap = my_cmap)
cset = ax.contourf(x, y, z,zdir ='z',offset = np.min(z),cmap = my_cmap)
cset = ax.contourf(x, y, z,zdir ='x',offset =-5,cmap = my_cmap)
cset = ax.contourf(x, y, z, zdir ='y',offset = 5,cmap = my_cmap)
fig.colorbar(surf, ax = ax, shrink = 0.5,aspect = 5)# Adding labels
ax.set_xlabel('X-axis')
ax.set_xlim(-5, 5)
ax.set_ylabel('Y-axis')
ax.set_ylim(-5, 5)
ax.set_zlabel('Z-axis')
ax.set_zlim(np.min(z), np.max(z))
ax.set_title('3D surface having 2D contour plot projections')# show plot
plt.show()
2.7.6 case 6
# importing modules
from mpl_toolkits.mplot3d import axes3d
from matplotlib import pyplot # creating the visualization
fig = pyplot.figure()
wf = fig.add_subplot(111, projection='3d')
x, y, z = axes3d.get_test_data(0.05)
wf.plot_wireframe(x,y,z, rstride=2, cstride=2,color='green')# displaying the visualization
wf.set_title('Example 1')
pyplot.show()
2.7.7 case 7
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
import math x = [i for i in range(0, 200, 100)]
y = [i for i in range(0, 200, 100)] X, Y = np.meshgrid(x, y)
Z = []
for i in x: t = [] for j in y: t.append(math.tan(math.sqrt(i*2+j*2))) Z.append(t) fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contour3D(X, Y, Z, 50, cmap=cm.cool)
ax.set_xlabel('a')
ax.set_ylabel('b')
ax.set_zlabel('c')
ax.set_title('3D contour for tan')
plt.show()
2.7.8 case 8
# Import libraries
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np # Creating radii and angles
r = np.linspace(0.125, 1.0, 100)
a = np.linspace(0, 2 * np.pi, 100,endpoint = False) # Repeating all angles for every radius
a = np.repeat(a[..., np.newaxis], 100, axis = 1) # Creating dataset
x = np.append(0, (r * np.cos(a)))
y = np.append(0, (r * np.sin(a)))
z = (np.sin(x ** 4) + np.cos(y ** 4)) # Creating figure
fig = plt.figure(figsize =(16, 9))
ax = plt.axes(projection ='3d') # Creating color map
my_cmap = plt.get_cmap('hot')# Creating plot
trisurf = ax.plot_trisurf(x, y, z,cmap = my_cmap,linewidth = 0.2, antialiased = True,edgecolor = 'grey')
fig.colorbar(trisurf, ax = ax, shrink = 0.5, aspect = 5)
ax.set_title('Tri-Surface plot')# Adding labels
ax.set_xlabel('X-axis', fontweight ='bold')
ax.set_ylabel('Y-axis', fontweight ='bold')
ax.set_zlabel('Z-axis', fontweight ='bold')# show plot
plt.show()
2.7.9 case 9
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D a = np.array([1, 2, 3])
b = np.array([4, 5, 6, 7]) a, b = np.meshgrid(a, b) # surface plot for a**2 + b**2
a = np.arange(-1, 1, 0.02)
b = a
a, b = np.meshgrid(a, b) fig = plt.figure()
axes = fig.gca(projection ='3d')
axes.plot_surface(a, b, a**2 + b**2) plt.show()
2.7.10 case 10
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D a = np.array([1, 2, 3])
b = np.array([4, 5, 6, 7]) a, b = np.meshgrid(a, b) # surface plot for a**2 + b**2
a = np.arange(-1, 1, 0.02)
b = a
a, b = np.meshgrid(a, b) fig = plt.figure()
axes = fig.gca(projection ='3d')
axes.contour(a, b, a**2 + b**2) plt.show()
2.7.11 case 11
""" change view angle"""
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt fig = plt.figure(figsize = (8,8))
ax = plt.axes(projection = '3d') # Data for a three-dimensional line
z = np.linspace(0, 15, 1000)
x = np.sin(z)
y = np.cos(z)
ax.plot3D(x, y, z, 'green') ax.view_init(-140, 60) plt.show()
2.7.12 case 12
""" change view angle"""
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from math import sin, cos fig = plt.figure(figsize = (8,8))
ax = fig.add_subplot(111, projection = '3d') #creating Datasheet
y = np.linspace(-1, 1, 200)
x = np.linspace(-1, 1, 200)
x,y = np.meshgrid(x, y) #set z values
z = x + y # rotate the samples by changing the value of 'a'
a = 50t = np.transpose(np.array([x, y, z]), ( 1, 2, 0)) m = [[cos(a), 0, sin(a)],[0, 1, 0], [-sin(a), 0, cos(a)]] X,Y,Z = np.transpose(np.dot(t, m), (2, 0, 1)) #label axes
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z') #plot figure
ax.plot_surface(X,Y,Z, alpha = 0.5, color = 'red') plt.show()
2.7.13 case 13
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt fig = plt.figure(figsize = (8, 8))
ax = plt.axes(projection = '3d') # Data for a three-dimensional line
z = np.linspace(0, 15, 1000)
x = np.sin(z)
y = np.cos(z)
ax.plot3D(x, y, z, 'green') ax.view_init(120, 30) plt.show()
2.7 box graph
2.7.1 case 1
# importing libraries
import matplotlib.pyplot as plt
import pandas as pd
import numpy as npdf = pd.DataFrame(np.random.rand(10, 5), columns =['A', 'B', 'C', 'D', 'E'])df.plot.box()
plt.show()
2.7.2 case 2
import matplotlib.pyplot as plt
import numpy as npfrom matplotlib.patches import Polygon# Fixing random state for reproducibility
np.random.seed(19680801)# fake up some data
spread = np.random.rand(50) * 100
center = np.ones(25) * 50
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
data = np.concatenate((spread, center, flier_high, flier_low))fig, axs = plt.subplots(2, 3)# basic plot
axs[0, 0].boxplot(data)
axs[0, 0].set_title('basic plot')# notched plot
axs[0, 1].boxplot(data, 1)
axs[0, 1].set_title('notched plot')# change outlier point symbols
axs[0, 2].boxplot(data, 0, 'gD')
axs[0, 2].set_title('change outlier\npoint symbols')# don't show outlier points
axs[1, 0].boxplot(data, 0, '')
axs[1, 0].set_title("don't show\noutlier points")# horizontal boxes
axs[1, 1].boxplot(data, 0, 'rs', 0)
axs[1, 1].set_title('horizontal boxes')# change whisker length
axs[1, 2].boxplot(data, 0, 'rs', 0, 0.75)
axs[1, 2].set_title('change whisker length')fig.subplots_adjust(left=0.08, right=0.98, bottom=0.05, top=0.9,hspace=0.4, wspace=0.3)# fake up some more data
spread = np.random.rand(50) * 100
center = np.ones(25) * 40
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
d2 = np.concatenate((spread, center, flier_high, flier_low))
# Making a 2-D array only works if all the columns are the
# same length. If they are not, then use a list instead.
# This is actually more efficient because boxplot converts
# a 2-D array into a list of vectors internally anyway.
data = [data, d2, d2[::2]]# Multiple box plots on one Axes
fig, ax = plt.subplots()
ax.boxplot(data)plt.show()
2.7.3 case 3
random_dists = ['Normal(1, 1)', 'Lognormal(1, 1)', 'Exp(1)', 'Gumbel(6, 4)','Triangular(2, 9, 11)']
N = 500norm = np.random.normal(1, 1, N)
logn = np.random.lognormal(1, 1, N)
expo = np.random.exponential(1, N)
gumb = np.random.gumbel(6, 4, N)
tria = np.random.triangular(2, 9, 11, N)# Generate some random indices that we'll use to resample the original data
# arrays. For code brevity, just use the same random indices for each array
bootstrap_indices = np.random.randint(0, N, N)
data = [norm, norm[bootstrap_indices],logn, logn[bootstrap_indices],expo, expo[bootstrap_indices],gumb, gumb[bootstrap_indices],tria, tria[bootstrap_indices],
]fig, ax1 = plt.subplots(figsize=(10, 6))
fig.canvas.manager.set_window_title('A Boxplot Example')
fig.subplots_adjust(left=0.075, right=0.95, top=0.9, bottom=0.25)bp = ax1.boxplot(data, notch=False, sym='+', vert=True, whis=1.5)
plt.setp(bp['boxes'], color='black')
plt.setp(bp['whiskers'], color='black')
plt.setp(bp['fliers'], color='red', marker='+')# Add a horizontal grid to the plot, but make it very light in color
# so we can use it for reading data values but not be distracting
ax1.yaxis.grid(True, linestyle='-', which='major', color='lightgrey',alpha=0.5)ax1.set(axisbelow=True, # Hide the grid behind plot objectstitle='Comparison of IID Bootstrap Resampling Across Five Distributions',xlabel='Distribution',ylabel='Value',
)# Now fill the boxes with desired colors
box_colors = ['darkkhaki', 'royalblue']
num_boxes = len(data)
medians = np.empty(num_boxes)
for i in range(num_boxes):box = bp['boxes'][i]box_x = []box_y = []for j in range(5):box_x.append(box.get_xdata()[j])box_y.append(box.get_ydata()[j])box_coords = np.column_stack([box_x, box_y])# Alternate between Dark Khaki and Royal Blueax1.add_patch(Polygon(box_coords, facecolor=box_colors[i % 2]))# Now draw the median lines back over what we just filled inmed = bp['medians'][i]median_x = []median_y = []for j in range(2):median_x.append(med.get_xdata()[j])median_y.append(med.get_ydata()[j])ax1.plot(median_x, median_y, 'k')medians[i] = median_y[0]# Finally, overplot the sample averages, with horizontal alignment# in the center of each boxax1.plot(np.average(med.get_xdata()), np.average(data[i]),color='w', marker='*', markeredgecolor='k')# Set the axes ranges and axes labels
ax1.set_xlim(0.5, num_boxes + 0.5)
top = 40
bottom = -5
ax1.set_ylim(bottom, top)
ax1.set_xticklabels(np.repeat(random_dists, 2),rotation=45, fontsize=8)# Due to the Y-axis scale being different across samples, it can be
# hard to compare differences in medians across the samples. Add upper
# X-axis tick labels with the sample medians to aid in comparison
# (just use two decimal places of precision)
pos = np.arange(num_boxes) + 1
upper_labels = [str(round(s, 2)) for s in medians]
weights = ['bold', 'semibold']
for tick, label in zip(range(num_boxes), ax1.get_xticklabels()):k = tick % 2ax1.text(pos[tick], .95, upper_labels[tick],transform=ax1.get_xaxis_transform(),horizontalalignment='center', size='x-small',weight=weights[k], color=box_colors[k])# Finally, add a basic legend
fig.text(0.80, 0.08, f'{N} Random Numbers',backgroundcolor=box_colors[0], color='black', weight='roman',size='x-small')
fig.text(0.80, 0.045, 'IID Bootstrap Resample',backgroundcolor=box_colors[1],color='white', weight='roman', size='x-small')
fig.text(0.80, 0.015, '*', color='white', backgroundcolor='silver',weight='roman', size='medium')
fig.text(0.815, 0.013, ' Average Value', color='black', weight='roman',size='x-small')plt.show()
2.7.4 case 4
def fake_bootstrapper(n):"""This is just a placeholder for the user's method ofbootstrapping the median and its confidence intervals.Returns an arbitrary median and confidence interval packed into a tuple."""if n == 1:med = 0.1ci = (-0.25, 0.25)else:med = 0.2ci = (-0.35, 0.50)return med, ciinc = 0.1
e1 = np.random.normal(0, 1, size=500)
e2 = np.random.normal(0, 1, size=500)
e3 = np.random.normal(0, 1 + inc, size=500)
e4 = np.random.normal(0, 1 + 2*inc, size=500)treatments = [e1, e2, e3, e4]
med1, ci1 = fake_bootstrapper(1)
med2, ci2 = fake_bootstrapper(2)
medians = [None, None, med1, med2]
conf_intervals = [None, None, ci1, ci2]fig, ax = plt.subplots()
pos = np.arange(len(treatments)) + 1
bp = ax.boxplot(treatments, sym='k+', positions=pos,notch=True, bootstrap=5000,usermedians=medians,conf_intervals=conf_intervals)ax.set_xlabel('treatment')
ax.set_ylabel('response')
plt.setp(bp['whiskers'], color='k', linestyle='-')
plt.setp(bp['fliers'], markersize=3.0)
plt.show()
2.8 heatmap
2.8.1 case 1
# Program to plot 2-D Heat map
# using matplotlib.pyplot.imshow() method
import numpy as np
import matplotlib.pyplot as plt data = np.random.random((12, 12))
plt.imshow(data, cmap='autumn') plt.title("Heatmap with different color")
plt.show()
2.8.2 case 2
# Program to plot 2-D Heat map
# using matplotlib.pyplot.imshow() method
import numpy as np
import matplotlib.pyplot as plt data = np.random.random(( 12 , 12 ))
plt.imshow( data ) plt.title( "2-D Heat Map" )
plt.show()
2.8.3 case 3
data = np.random.random((12, 12))
plt.imshow(data, cmap='autumn', interpolation='nearest') # Add colorbar
plt.colorbar() plt.title("Heatmap with color bar")
plt.show()
2.8.4 case 4
import matplotlib.colors as colors # Generate random data
data = np.random.randint(0, 100, size=(8, 8)) # Create a custom color map
# with blue and green colors
colors_list = ['#0099ff', '#33cc33']
cmap = colors.ListedColormap(colors_list) # Plot the heatmap with custom colors and annotations
plt.imshow(data, cmap=cmap, vmin=0,\ vmax=100, extent=[0, 8, 0, 8])
for i in range(8): for j in range(8): plt.annotate(str(data[i][j]), xy=(j+0.5, i+0.5), ha='center', va='center', color='white') # Add colorbar
cbar = plt.colorbar(ticks=[0, 50, 100])
cbar.ax.set_yticklabels(['Low', 'Medium', 'High']) # Set plot title and axis labels
plt.title("Customized heatmap with annotations")
plt.xlabel("X-axis")
plt.ylabel("Y-axis") # Display the plot
plt.show()
2.8.5 case 5
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import colors df = pd.read_csv("gold_price_data.csv") # Calculate correlation between columns
corr_matrix = df.corr() # Create a custom color
# map with blue and green colors
colors_list = ['#FF5733', '#FFC300']
cmap = colors.ListedColormap(colors_list) # Plot the heatmap with custom colors and annotations
plt.imshow(corr_matrix, cmap=cmap, vmin=0\ , vmax=1, extent=[0, 5, 0, 5])
for i in range(5): for j in range(5): plt.annotate(str(round(corr_matrix.values[i][j], 2)),\ xy=(j+0.25, i+0.7), ha='center', va='center', color='white') # Add colorbar
cbar = plt.colorbar(ticks=[0, 0.5, 1])
cbar.ax.set_yticklabels(['Low', 'Medium', 'High']) # Set plot title and axis labels
plt.title("Correlation Matrix Of The Dataset")
plt.xlabel("Features")
plt.ylabel("Features") # Set tick labels
plt.xticks(range(len(corr_matrix.columns)),\ corr_matrix.columns, rotation=90)
plt.yticks(range(len(corr_matrix.columns)), corr_matrix.columns) # Display the plot
plt.show()
2.8.6 case 6
# importing the modules
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt # generating 2-D 10x10 matrix of random numbers
# from 1 to 100
data = np.random.randint(low=1, high=100, size=(10, 10)) # plotting the heatmap
hm = sns.heatmap(data=data, annot=True) # displaying the plotted heatmap
plt.show()
2.9 save fig
2.9.1 case 1
import matplotlib.pyplot as plt# Creating data
year = ['2010', '2002', '2004', '2006', '2008']
production = [25, 15, 35, 30, 10]# Plotting barchart
plt.bar(year, production)# Saving the figure.
plt.savefig("output.jpg")# Saving figure by changing parameter values
plt.savefig("output1", facecolor='y', bbox_inches="tight",pad_inches=0.3, transparent=True)
2.9.2 case 2
import matplotlib.pyplot as plt# Creating data
year = ['2010', '2002', '2004', '2006', '2008']
production = [25, 15, 35, 30, 10]# Plotting barchart
plt.bar(year, production)# Saving the figure.
plt.savefig("output.jpg")# Saving figure by changing parameter values
plt.savefig("output1", facecolor='y', bbox_inches="tight",pad_inches=0.3, transparent=True)
2.10 pandas绘图
2.10.1 case 1
# importing libraries
import matplotlib.pyplot as plt
import pandas as pd
import numpy as npts = pd.Series(np.random.randn(1000), index = pd.date_range('1/1/2000', periods = 1000))df = pd.DataFrame(np.random.randn(1000, 4),
index = ts.index, columns = list('ABCD'))df = df.cumsum()
plt.figure()
df.plot()
plt.show()
2.10.2 case 2
# importing libraries
import matplotlib.pyplot as plt
import pandas as pd
import numpy as npts = pd.Series(np.random.randn(1000), index = pd.date_range('1/1/2000', periods = 1000))df = pd.DataFrame(np.random.randn(1000, 4),
index = ts.index, columns = list('ABCD'))df = df.cumsum()
plt.figure()
df.plot()
plt.show()
2.10.3 case 3
# importing libraries
import matplotlib.pyplot as plt
import pandas as pd
import numpy as npts = pd.Series(np.random.randn(1000), index = pd.date_range('1/1/2000', periods = 1000))df = pd.DataFrame(np.random.randn(1000, 4), index = ts.index,columns = list('ABCD'))df3 = pd.DataFrame(np.random.randn(1000, 2),columns =['B', 'C']).cumsum()df3['A'] = pd.Series(list(range(len(df))))
df3.plot(x ='A', y ='B')
plt.show()
2.10.4 case 4
# importing libraries
import matplotlib.pyplot as plt
import pandas as pd
import numpy as npts = pd.Series(np.random.randn(1000), index = pd.date_range('1/1/2000', periods = 1000))df = pd.DataFrame(np.random.randn(1000, 4), index = ts.index,columns = list('ABCD'))df3 = pd.DataFrame(np.random.randn(1000, 2),columns =['B', 'C']).cumsum()df3['A'] = pd.Series(list(range(len(df))))
df3.iloc[5].plot.bar()
plt.axhline(0, color ='k')plt.show()
2.10.5 case 5
# importing libraries
import matplotlib.pyplot as plt
import pandas as pd
import numpy as npdf4 = pd.DataFrame({'a': np.random.randn(1000) + 1, 'b': np.random.randn(1000), 'c': np.random.randn(1000) - 1},columns =['a', 'b', 'c'])
plt.figure()df4.plot.hist(alpha = 0.5)
plt.show()
2.10.6 case 6
# importing libraries
import matplotlib.pyplot as plt
import pandas as pd
import numpy as npdf = pd.DataFrame(np.random.rand(10, 5), columns =['A', 'B', 'C', 'D', 'E'])df.plot.area()
plt.show()
2.10.7 case 7
# importing libraries
import matplotlib.pyplot as plt
import pandas as pd
import numpy as npdf = pd.DataFrame(np.random.rand(500, 4),columns =['a', 'b', 'c', 'd'])df.plot.scatter(x ='a', y ='b')
plt.show()
2.10.8 case 8
# importing libraries
import matplotlib.pyplot as plt
import pandas as pd
import numpy as npdf = pd.DataFrame(np.random.randn(1000, 2), columns =['a', 'b'])df['a'] = df['a'] + np.arrange(1000)
df.plot.hexbin(x ='a', y ='b', gridsize = 25)
plt.show()
2.10.9 case 9
# importing libraries
import matplotlib.pyplot as plt
import pandas as pd
import numpy as npseries = pd.Series(3 * np.random.rand(4),
index =['a', 'b', 'c', 'd'], name ='series')series.plot.pie(figsize =(4, 4))
plt.show()
2.10.10 case 10
import plotly.graph_objects as go
import pandas as pddf = pd.read_csv('https://raw.githubusercontent.com / plotly / datasets / 718417069ead87650b90472464c7565dc8c2cb1c / sunburst-coffee-flavors-complete.csv')fig = go.Figure()fig.add_trace(go.Sunburst(ids = df.ids,labels = df.labels,parents = df.parents,domain = dict(column = 0)
))fig.show()
2.11 error plot
2.11.1 case 1
# importing matplotlib
import matplotlib.pyplot as plt # making a simple plot
x =[1, 2, 3, 4, 5, 6, 7]
y =[1, 2, 1, 2, 1, 2, 1]# creating error
y_error = 0.2# plotting graph
plt.plot(x, y)plt.errorbar(x, y,yerr = y_error,fmt ='o')
2.11.2 case 2
# importing matplotlib
import matplotlib.pyplot as plt # making a simple plot
x =[1, 2, 3, 4, 5, 6, 7]
y =[1, 2, 1, 2, 1, 2, 1]# creating error
x_error = 0.5# plotting graph
plt.plot(x, y)
plt.errorbar(x, y,xerr = x_error,fmt ='o')
2.11.3 case 3
# importing matplotlib
import matplotlib.pyplot as plt # making a simple plot
x =[1, 2, 3, 4, 5, 6, 7]
y =[1, 2, 1, 2, 1, 2, 1]# creating error
x_error = 0.5
y_error = 0.3# plotting graph
plt.plot(x, y)
plt.errorbar(x, y, yerr = y_error, xerr = x_error, fmt ='o')
2.11.4 case 4
# importing matplotlib
import matplotlib.pyplot as plt# making a simple plot
x =[1, 2, 3, 4, 5]
y =[1, 2, 1, 2, 1]# creating error
y_errormin =[0.1, 0.5, 0.9,0.1, 0.9]
y_errormax =[0.2, 0.4, 0.6, 0.4, 0.2]x_error = 0.5
y_error =[y_errormin, y_errormax]# plotting graph
# plt.plot(x, y)
plt.errorbar(x, y,yerr = y_error,xerr = x_error, fmt ='o')
2.11.5 case 5
# import require modules
import numpy as np
import matplotlib.pyplot as plt# defining our function
x = np.arange(10)/10
y = (x + 0.1)**2# defining our error
y_error = np.linspace(0.05, 0.2, 10)# plotting our function and
# error bar
plt.plot(x, y)plt.errorbar(x, y, yerr = y_error, fmt ='o')
3.动画
3.1 case 1
from matplotlib import pyplot as plt
import numpy as np
from matplotlib.animation import FuncAnimation # initializing a figure in
# which the graph will be plotted
fig = plt.figure() # marking the x-axis and y-axis
axis = plt.axes(xlim =(0, 4), ylim =(-2, 2)) # initializing a line variable
line, = axis.plot([], [], lw = 3) # data which the line will
# contain (x, y)
def init(): line.set_data([], []) return line, def animate(i): x = np.linspace(0, 4, 1000) # plots a sine graph y = np.sin(2 * np.pi * (x - 0.01 * i)) line.set_data(x, y) return line, anim = FuncAnimation(fig, animate, init_func = init, frames = 200, interval = 20, blit = True) anim.save('continuousSineWave.mp4', writer = 'ffmpeg', fps = 30)
3.2 case 2
import matplotlib.animation as animation
import matplotlib.pyplot as plt
import numpy as np # creating a blank window
# for the animation
fig = plt.figure()
axis = plt.axes(xlim =(-50, 50), ylim =(-50, 50)) line, = axis.plot([], [], lw = 2) # what will our line dataset
# contain?
def init(): line.set_data([], []) return line, # initializing empty values
# for x and y co-ordinates
xdata, ydata = [], [] # animation function
def animate(i): # t is a parameter which varies # with the frame number t = 0.1 * i # x, y values to be plotted x = t * np.sin(t) y = t * np.cos(t) # appending values to the previously # empty x and y data holders xdata.append(x) ydata.append(y) line.set_data(xdata, ydata) return line, # calling the animation function
anim = animation.FuncAnimation(fig, animate, init_func = init, frames = 500, interval = 20, blit = True) # saves the animation in our desktop
anim.save('growingCoil.mp4', writer = 'ffmpeg', fps = 30) """anim = animation.FuncAnimation(fig, update_line, frames=len_frames,fargs=(data_args, plot_list),interval=100,repeat=False)anim.save("growingCoil.gif", writer='pillow')
"""