雷军看了都说好的25个实用Python代码分享

在小米之前的一次发布会上,雷军与代言人王源展开了一场对话,在对话过程中,雷军回答了不少的提问,在这些提问中,其中一个问题引发了广泛的关注。

雷军在被问道会不会写诗的时候说“我没有写过诗,但有人说我写的代码像诗一样优雅”。众人都知道雷军是一个优秀的企业家,但却很少有人知道雷军还很会写代码。

下面小编带来的Python代码,连“写代码像写诗一样优雅”的雷军都说好,干货满满,还不赶快学起来!

1. 散点图

Scatteplot是用于研究两个变量之间关系的经典和基本图。如果数据中有多个组,则可能需要以不同颜色可视化每个组。在Matplotlib,你可以方便地使用。

# Import dataset midwest= pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/midwest_filter.csv")# Prepare Data # Create as many colors as there are unique midwest['category']categories= np.unique(midwest['category'])colors= [plt.cm.tab10(i/float(len(categories)-1)) for iinrange(len(categories))]# Draw Plot for Each Categoryplt.figure(figsize=(16,10),dpi=80,facecolor='w',edgecolor='k')for i, categoryinenumerate(categories):    plt.scatter('area', 'poptotal',data=midwest.loc[midwest.category==category,:],s=20,c=colors[i],label=str(category))# Decorationsplt.gca().set(xlim=(0.0,0.1),ylim=(0,90000),xlabel='Area',ylabel='Population')plt.xticks(fontsize=12);plt.yticks(fontsize=12)plt.title("Scatterplot of Midwest Area vs Population",fontsize=22)plt.legend(fontsize=12)plt.show()

2. 带边界的气泡图

有时,您希望在边界内显示一组点以强调其重要性。在此示例中,您将从应该被环绕的数据帧中获取记录,并将其传递给下面的代码中描述的记录。encircle()

from matplotlibimportpatchesfrom scipy.spatialimportConvexHullimportwarnings; warnings.simplefilter('ignore')sns.set_style("white")# Step 1: Prepare Datamidwest= pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/midwest_filter.csv")# As many colors as there are unique midwest['category']categories= np.unique(midwest['category'])colors= [plt.cm.tab10(i/float(len(categories)-1)) for iinrange(len(categories))]# Step 2: Draw Scatterplot with unique color for each categoryfig= plt.figure(figsize=(16,10),dpi=80,facecolor='w',edgecolor='k')for i, categoryinenumerate(categories):    plt.scatter('area', 'poptotal',data=midwest.loc[midwest.category==category,:],s='dot_size',c=colors[i],label=str(category),edgecolors='black',linewidths=.5)# Step 3: Encircling# https://stackoverflow.com/questions/44575681/how-do-i-encircle-different-data-sets-in-scatter-plotdef encircle(x,y,ax=None,**kw):ifnot ax:ax=plt.gca()p= np.c_[x,y]hull= ConvexHull(p)poly= plt.Polygon(p[hull.vertices,:], **kw)    ax.add_patch(poly)# Select data to be encircledmidwest_encircle_data= midwest.loc[midwest.state=='IN',:]# Draw polygon surrounding vertices    encircle(midwest_encircle_data.area, midwest_encircle_data.poptotal,ec="k",fc="gold",alpha=0.1)encircle(midwest_encircle_data.area, midwest_encircle_data.poptotal,ec="firebrick",fc="none",linewidth=1.5)# Step 4: Decorationsplt.gca().set(xlim=(0.0,0.1),ylim=(0,90000),xlabel='Area',ylabel='Population')plt.xticks(fontsize=12);plt.yticks(fontsize=12)plt.title("Bubble Plot with Encircling",fontsize=22)plt.legend(fontsize=12)plt.show()

3. 带线性回归最佳拟合线的散点图

如果你想了解两个变量如何相互改变,那么最合适的线就是要走的路。下图显示了数据中各组之间最佳拟合线的差异。要禁用分组并仅为整个数据集绘制一条最佳拟合线,请从下面的调用中删除该参数。

# Import Datadf = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/mpg_ggplot2.csv")df_select = df.loc[df.cyl.isin([4,8]), :]# Plotsns.set_style("white")gridobj = sns.lmplot(x="displ",y="hwy",hue="cyl",data=df_select,height=7,aspect=1.6,robust=True,palette='tab10',scatter_kws=dict(s=60,linewidths=.7,edgecolors='black'))# Decorationsgridobj.set(xlim=(0.5, 7.5), ylim=(0, 50))plt.title("Scatterplot with line of best fit grouped by number of cylinders",fontsize=20)

每个回归线都在自己的列中

或者,您可以在其自己的列中显示每个组的最佳拟合线。你可以通过在里面设置参数来实现这一点。

# Import Datadf = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/mpg_ggplot2.csv")df_select = df.loc[df.cyl.isin([4,8]), :]# Each line in its own columnsns.set_style("white")gridobj = sns.lmplot(x="displ",y="hwy",data=df_select,height=7,robust=True,palette='Set1',col="cyl",scatter_kws=dict(s=60,linewidths=.7,edgecolors='black'))# Decorationsgridobj.set(xlim=(0.5, 7.5), ylim=(0, 50))plt.show()

4. 抖动图

通常,多个数据点具有完全相同的X和Y值。结果,多个点相互绘制并隐藏。为避免这种情况,请稍微抖动点,以便您可以直观地看到它们。这很方便使用

# Import Datadf= pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/mpg_ggplot2.csv")# Draw Stripplotfig,ax= plt.subplots(figsize=(16,10),dpi=80)    sns.stripplot(df.cty, df.hwy,jitter=0.25,size=8,ax=ax,linewidth=.5)# Decorationsplt.title('Use jittered plots to avoid overlapping of points',fontsize=22)plt.show()

5. 计数图

避免点重叠问题的另一个选择是增加点的大小,这取决于该点中有多少点。因此,点的大小越大,周围的点的集中度就越大。

# Import Datadf= pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/mpg_ggplot2.csv")df_counts= df.groupby(['hwy', 'cty']).size().reset_index(name='counts')# Draw Stripplotfig,ax= plt.subplots(figsize=(16,10),dpi=80)    sns.stripplot(df_counts.cty, df_counts.hwy,size=df_counts.counts*2,ax=ax)# Decorationsplt.title('Counts Plot - Size of circle is bigger as more points overlap',fontsize=22)plt.show()

6. 边缘直方图

边缘直方图具有沿X和Y轴变量的直方图。这用于可视化X和Y之间的关系以及单独的X和Y的单变量分布。该图如果经常用于探索性数据分析(EDA)。

# Import Datadf= pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/mpg_ggplot2.csv")# Create Fig and gridspecfig= plt.figure(figsize=(16,10),dpi=80)grid= plt.GridSpec(4,4,hspace=0.5,wspace=0.2)# Define the axesax_main= fig.add_subplot(grid[:-1, :-1])ax_right= fig.add_subplot(grid[:-1, -1],xticklabels=[],yticklabels=[])ax_bottom= fig.add_subplot(grid[-1,0:-1],xticklabels=[],yticklabels=[])# Scatterplot on main axax_main.scatter('displ', 'hwy',s=df.cty*4,c=df.manufacturer.astype('category').cat.codes,alpha=.9,data=df,cmap="tab10",edgecolors='gray',linewidths=.5)# histogram on the rightax_bottom.hist(df.displ,40,histtype='stepfilled',orientation='vertical',color='deeppink')ax_bottom.invert_yaxis()# histogram in the bottomax_right.hist(df.hwy,40,histtype='stepfilled',orientation='horizontal',color='deeppink')# Decorationsax_main.set(title='ScatterplotwithHistograms  displ vs hwy',xlabel='displ',ylabel='hwy')ax_main.title.set_fontsize(20)for itemin([ax_main.xaxis.label, ax_main.yaxis.label] + ax_main.get_xticklabels() + ax_main.get_yticklabels()):    item.set_fontsize(14)xlabels= ax_main.get_xticks().tolist()ax_main.set_xticklabels(xlabels)plt.show()

7.边缘箱形图

边缘箱图与边缘直方图具有相似的用途。然而,箱线图有助于精确定位X和Y的中位数,第25和第75百分位数。

# Import Datadf= pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/mpg_ggplot2.csv")# Create Fig and gridspecfig= plt.figure(figsize=(16,10),dpi=80)grid= plt.GridSpec(4,4,hspace=0.5,wspace=0.2)# Define the axesax_main= fig.add_subplot(grid[:-1, :-1])ax_right= fig.add_subplot(grid[:-1, -1],xticklabels=[],yticklabels=[])ax_bottom= fig.add_subplot(grid[-1,0:-1],xticklabels=[],yticklabels=[])# Scatterplot on main axax_main.scatter('displ', 'hwy',s=df.cty*5,c=df.manufacturer.astype('category').cat.codes,alpha=.9,data=df,cmap="Set1",edgecolors='black',linewidths=.5)# Add a graph in each partsns.boxplot(df.hwy,ax=ax_right,orient="v")sns.boxplot(df.displ,ax=ax_bottom,orient="h")# Decorations ------------------# Remove x axis name for the boxplotax_bottom.set(xlabel='')ax_right.set(ylabel='')# Main Title, Xlabel and YLabelax_main.set(title='ScatterplotwithHistograms  displ vs hwy',xlabel='displ',ylabel='hwy')# Set font size of different componentsax_main.title.set_fontsize(20)for itemin([ax_main.xaxis.label, ax_main.yaxis.label] + ax_main.get_xticklabels() + ax_main.get_yticklabels()):    item.set_fontsize(14)plt.show()

8. 相关图

Correlogram用于直观地查看给定数据帧(或2D数组)中所有可能的数值变量对之间的相关度量。

# Import Datasetdf= pd.read_csv("https://github.com/selva86/datasets/raw/master/mtcars.csv")# Plotplt.figure(figsize=(12,10),dpi=80)sns.heatmap(df.corr(),xticklabels=df.corr().columns,yticklabels=df.corr().columns,cmap='RdYlGn',center=0,annot=True)# Decorationsplt.title('Correlogram of mtcars',fontsize=22)plt.xticks(fontsize=12)plt.yticks(fontsize=12)plt.show()

9. 矩阵图

成对图是探索性分析中的最爱,以理解所有可能的数字变量对之间的关系。它是双变量分析的必备工具。

# Load Datasetdf= sns.load_dataset('iris')# Plotplt.figure(figsize=(10,8),dpi=80)sns.pairplot(df,kind="scatter",hue="species",plot_kws=dict(s=80,edgecolor="white",linewidth=2.5))plt.show()

# Load Datasetdf= sns.load_dataset('iris')# Plotplt.figure(figsize=(10,8),dpi=80)sns.pairplot(df,kind="reg",hue="species")plt.show()

偏差

10. 发散型条形图

如果您想根据单个指标查看项目的变化情况,并可视化此差异的顺序和数量,那么发散条是一个很好的工具。它有助于快速区分数据中组的性能,并且非常直观,并且可以立即传达这一点。

# Prepare Datadf= pd.read_csv("https://github.com/selva86/datasets/raw/master/mtcars.csv")x= df.loc[:, ['mpg']]df['mpg_z'] = (x - x.mean())/x.std()df['colors'] = ['red'ifx <0else'green' for xindf['mpg_z']]df.sort_values('mpg_z',inplace=True)df.reset_index(inplace=True)# Draw plotplt.figure(figsize=(14,10),dpi=80)plt.hlines(y=df.index,xmin=0,xmax=df.mpg_z,color=df.colors,alpha=0.4,linewidth=5)# Decorationsplt.gca().set(ylabel='$Model$',xlabel='$Mileage$')plt.yticks(df.index, df.cars,fontsize=12)plt.title('Diverging Bars of Car Mileage',fontdict={'size':20})plt.grid(linestyle='--',alpha=0.5)plt.show()

11. 发散型文本

分散的文本类似于发散条,如果你想以一种漂亮和可呈现的方式显示图表中每个项目的价值,它更喜欢。

# Prepare Datadf = pd.read_csv("https://github.com/selva86/datasets/raw/master/mtcars.csv")x = df.loc[:, ['mpg']]df['mpg_z'] = (x - x.mean())/x.std()df['colors'] = ['red'ifx <0else'green'forxindf['mpg_z']]df.sort_values('mpg_z', inplace=True)df.reset_index(inplace=True)# Draw plotplt.figure(figsize=(14,14), dpi=80)plt.hlines(y=df.index, xmin=0, xmax=df.mpg_z)forx, y, texinzip(df.mpg_z, df.index, df.mpg_z):    t = plt.text(x, y,round(tex,2), horizontalalignment='right'ifx <0else'left',                  verticalalignment='center', fontdict={'color':'red'ifx <0else'green','size':14})# Decorations    plt.yticks(df.index, df.cars, fontsize=12)plt.title('Diverging Text Bars of Car Mileage', fontdict={'size':20})plt.grid(linestyle='--', alpha=0.5)plt.xlim(-2.5,2.5)plt.show()

12. 发散型包点图

发散点图也类似于发散条。然而,与发散条相比,条的不存在减少了组之间的对比度和差异。

# Prepare Datadf = pd.read_csv("https://github.com/selva86/datasets/raw/master/mtcars.csv")x = df.loc[:, ['mpg']]df['mpg_z'] = (x - x.mean())/x.std()df['colors'] = ['red'ifx <0else'darkgreen'forxindf['mpg_z']]df.sort_values('mpg_z', inplace=True)df.reset_index(inplace=True)# Draw plotplt.figure(figsize=(14,16), dpi=80)plt.scatter(df.mpg_z, df.index, s=450, alpha=.6, color=df.colors)forx, y, texinzip(df.mpg_z, df.index, df.mpg_z):    t = plt.text(x, y,round(tex,1), horizontalalignment='center',                  verticalalignment='center', fontdict={'color':'white'})# Decorations# Lighten bordersplt.gca().spines["top"].set_alpha(.3)plt.gca().spines["bottom"].set_alpha(.3)plt.gca().spines["right"].set_alpha(.3)plt.gca().spines["left"].set_alpha(.3)plt.yticks(df.index, df.cars)plt.title('Diverging Dotplot of Car Mileage', fontdict={'size':20})plt.xlabel('$Mileage$')plt.grid(linestyle='--', alpha=0.5)plt.xlim(-2.5,2.5)plt.show()

13. 带标记的发散型棒棒糖图

带标记的棒棒糖通过强调您想要引起注意的任何重要数据点并在图表中适当地给出推理,提供了一种可视化分歧的灵活方式。

# Prepare Datadf= pd.read_csv("https://github.com/selva86/datasets/raw/master/mtcars.csv")x= df.loc[:, ['mpg']]df['mpg_z'] = (x - x.mean())/x.std()df['colors'] = 'black'# color fiat differentlydf.loc[df.cars== 'Fiat X1-9', 'colors'] = 'darkorange'df.sort_values('mpg_z',inplace=True)df.reset_index(inplace=True)# Draw plotimportmatplotlib.patches as patchesplt.figure(figsize=(14,16),dpi=80)plt.hlines(y=df.index,xmin=0,xmax=df.mpg_z,color=df.colors,alpha=0.4,linewidth=1)plt.scatter(df.mpg_z, df.index,color=df.colors,s=[600ifx== 'Fiat X1-9'else300for xindf.cars],alpha=0.6)plt.yticks(df.index, df.cars)plt.xticks(fontsize=12)# Annotateplt.annotate('Mercedes Models',xy=(0.0,11.0),xytext=(1.0,11),xycoords='data',fontsize=15,ha='center',va='center',bbox=dict(boxstyle='square',fc='firebrick'),arrowprops=dict(arrowstyle='-[,widthB=2.0,lengthB=1.5',lw=2.0,color='steelblue'),color='white')# Add Patchesp1= patches.Rectangle((-2.0, -1),width=.3,height=3,alpha=.2,facecolor='red')p2= patches.Rectangle((1.5,27),width=.8,height=5,alpha=.2,facecolor='green')plt.gca().add_patch(p1)plt.gca().add_patch(p2)# Decorateplt.title('Diverging Bars of Car Mileage',fontdict={'size':20})plt.grid(linestyle='--',alpha=0.5)plt.show()

14.面积图

通过对轴和线之间的区域进行着色,区域图不仅强调峰值和低谷,而且还强调高点和低点的持续时间。高点持续时间越长,线下面积越大。

importnumpy as npimportpandas as pd# Prepare Datadf= pd.read_csv("https://github.com/selva86/datasets/raw/master/economics.csv",parse_dates=['date']).head(100)x= np.arange(df.shape[0])y_returns= (df.psavert.diff().fillna(0)/df.psavert.shift(1)).fillna(0) *100# Plotplt.figure(figsize=(16,10),dpi=80)plt.fill_between(x[1:], y_returns[1:],0,where=y_returns[1:]>=0,facecolor='green',interpolate=True,alpha=0.7)plt.fill_between(x[1:], y_returns[1:],0,where=y_returns[1:]<=0,facecolor='red',interpolate=True,alpha=0.7)# Annotateplt.annotate('Peak1975',xy=(94.0,21.0),xytext=(88.0,28),bbox=dict(boxstyle='square',fc='firebrick'),arrowprops=dict(facecolor='steelblue',shrink=0.05),fontsize=15,color='white')# Decorationsxtickvals= [str(m)[:3].upper()+"-"+str(y) for y,minzip(df.date.dt.year, df.date.dt.month_name())]plt.gca().set_xticks(x[::6])plt.gca().set_xticklabels(xtickvals[::6],rotation=90,fontdict={'horizontalalignment':'center', 'verticalalignment': 'center_baseline'})plt.ylim(-35,35)plt.xlim(1,100)plt.title("Month Economics Return %",fontsize=22)plt.ylabel('Monthly returns %')plt.grid(alpha=0.5)plt.show()

15. 有序条形图

有序条形图有效地传达了项目的排名顺序。但是,在图表上方添加度量标准的值,用户可以从图表本身获取精确信息。

# Prepare Datadf_raw= pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")df= df_raw[['cty', 'manufacturer']].groupby('manufacturer').apply(lambda x: x.mean())df.sort_values('cty',inplace=True)df.reset_index(inplace=True)# Draw plotimportmatplotlib.patches as patchesfig,ax= plt.subplots(figsize=(16,10),facecolor='white',dpi=80)ax.vlines(x=df.index,ymin=0,ymax=df.cty,color='firebrick',alpha=0.7,linewidth=20)# Annotate Textfor i, ctyinenumerate(df.cty):    ax.text(i, cty+0.5, round(cty,1),horizontalalignment='center')# Title, Label, Ticks and Ylimax.set_title('Bar Chart for Highway Mileage',fontdict={'size':22})ax.set(ylabel='MilesPer Gallon',ylim=(0,30))plt.xticks(df.index, df.manufacturer.str.upper(),rotation=60,horizontalalignment='right',fontsize=12)# Add patches to color the X axis labelsp1= patches.Rectangle((.57, -0.005),width=.33,height=.13,alpha=.1,facecolor='green',transform=fig.transFigure)p2= patches.Rectangle((.124, -0.005),width=.446,height=.13,alpha=.1,facecolor='red',transform=fig.transFigure)fig.add_artist(p1)fig.add_artist(p2)plt.show()

16. 棒棒糖图

棒棒糖图表以一种视觉上令人愉悦的方式提供与有序条形图类似的目的。

# Prepare Datadf_raw= pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")df= df_raw[['cty', 'manufacturer']].groupby('manufacturer').apply(lambda x: x.mean())df.sort_values('cty',inplace=True)df.reset_index(inplace=True)# Draw plotfig,ax= plt.subplots(figsize=(16,10),dpi=80)ax.vlines(x=df.index,ymin=0,ymax=df.cty,color='firebrick',alpha=0.7,linewidth=2)ax.scatter(x=df.index,y=df.cty,s=75,color='firebrick',alpha=0.7)# Title, Label, Ticks and Ylimax.set_title('Lollipop Chart for Highway Mileage',fontdict={'size':22})ax.set_ylabel('Miles Per Gallon')ax.set_xticks(df.index)ax.set_xticklabels(df.manufacturer.str.upper(),rotation=60,fontdict={'horizontalalignment':'right', 'size':12})ax.set_ylim(0,30)# Annotatefor rowindf.itertuples():    ax.text(row.Index, row.cty+.5,s=round(row.cty,2),horizontalalignment='center',verticalalignment='bottom',fontsize=14)plt.show()

17. 包点图

点图表传达了项目的排名顺序。由于它沿水平轴对齐,因此您可以更容易地看到点彼此之间的距离。

# Prepare Datadf_raw = pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")df = df_raw[['cty', 'manufacturer']].groupby('manufacturer').apply(lambda x: x.mean())df.sort_values('cty',inplace=True)df.reset_index(inplace=True)# Draw plotfig, ax = plt.subplots(figsize=(16,10), dpi= 80)ax.hlines(y=df.index,xmin=11,xmax=26,color='gray',alpha=0.7,linewidth=1,linestyles='dashdot')ax.scatter(y=df.index,x=df.cty,s=75,color='firebrick',alpha=0.7)# Title, Label, Ticks and Ylimax.set_title('Dot Plot for Highway Mileage',fontdict={'size':22})ax.set_xlabel('Miles Per Gallon')ax.set_yticks(df.index)ax.set_yticklabels(df.manufacturer.str.title(), fontdict={'horizontalalignment': 'right'})ax.set_xlim(10, 27)plt.show()

18. 坡度图

斜率图最适合比较给定人/项目的“之前”和“之后”位置。

importmatplotlib.lines as mlines# Import Datadf = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/gdppercap.csv")left_label = [str(c) +', '+str(round(y))forc, y in zip(df.continent, df['1952'])]right_label = [str(c) +', '+str(round(y))forc, y in zip(df.continent, df['1957'])]klass = ['red'if(y1-y2) <0else'green'fory1, y2 in zip(df['1952'], df['1957'])]#drawline# https://stackoverflow.com/questions/36470343/how-to-draw-a-line-with-matplotlib/36479941def newline(p1, p2,color='black'):    ax = plt.gca()    l = mlines.Line2D([p1[0],p2[0]], [p1[1],p2[1]],color='red'ifp1[1]-p2[1] >0else'green', marker='o', markersize=6)    ax.add_line(l)returnlfig, ax = plt.subplots(1,1,figsize=(14,14), dpi=80)# Vertical Linesax.vlines(x=1, ymin=500, ymax=13000,color='black',alpha=0.7, linewidth=1, linestyles='dotted')ax.vlines(x=3, ymin=500, ymax=13000,color='black',alpha=0.7, linewidth=1, linestyles='dotted')# Pointsax.scatter(y=df['1952'], x=np.repeat(1, df.shape[0]), s=10,color='black',alpha=0.7)ax.scatter(y=df['1957'], x=np.repeat(3, df.shape[0]), s=10,color='black',alpha=0.7)# Line Segmentsand Annotationforp1, p2, c in zip(df['1952'], df['1957'], df['continent']):    newline([1,p1], [3,p2])    ax.text(1-0.05, p1, c +', '+str(round(p1)), horizontalalignment='right', verticalalignment='center', fontdict={'size':14})    ax.text(3+0.05, p2, c +', '+str(round(p2)), horizontalalignment='left', verticalalignment='center', fontdict={'size':14})#'Before'and'After'Annotationsax.text(1-0.05,13000,'BEFORE', horizontalalignment='right', verticalalignment='center', fontdict={'size':18,'weight':700})ax.text(3+0.05,13000,'AFTER', horizontalalignment='left', verticalalignment='center', fontdict={'size':18,'weight':700})# Decorationax.set_title("Slopechart: Comparing GDP Per Capita between 1952 vs 1957", fontdict={'size':22})ax.set(xlim=(0,4), ylim=(0,14000), ylabel='Mean GDP Per Capita')ax.set_xticks([1,3])ax.set_xticklabels(["1952","1957"])plt.yticks(np.arange(500,13000,2000), fontsize=12)# Lighten bordersplt.gca().spines["top"].set_alpha(.0)plt.gca().spines["bottom"].set_alpha(.0)plt.gca().spines["right"].set_alpha(.0)plt.gca().spines["left"].set_alpha(.0)plt.show()

19. 哑铃图

哑铃图传达各种项目的“前”和“后”位置以及项目的排序。如果您想要将特定项目/计划对不同对象的影响可视化,那么它非常有用。

importmatplotlib.lines as mlines# Import Datadf= pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/health.csv")df.sort_values('pct_2014',inplace=True)df.reset_index(inplace=True)# Func to draw line segmentdef newline(p1, p2,color='black'):ax= plt.gca()l= mlines.Line2D([p1[0],p2[0]], [p1[1],p2[1]],color='skyblue')ax.add_line(l)    return l# Figure and Axesfig,ax= plt.subplots(1,1,figsize=(14,14),facecolor='#f7f7f7',dpi=80)# Vertical Linesax.vlines(x=.05,ymin=0,ymax=26,color='black',alpha=1,linewidth=1,linestyles='dotted')ax.vlines(x=.10,ymin=0,ymax=26,color='black',alpha=1,linewidth=1,linestyles='dotted')ax.vlines(x=.15,ymin=0,ymax=26,color='black',alpha=1,linewidth=1,linestyles='dotted')ax.vlines(x=.20,ymin=0,ymax=26,color='black',alpha=1,linewidth=1,linestyles='dotted')# Pointsax.scatter(y=df['index'],x=df['pct_2013'],s=50,color='#0e668b',alpha=0.7)ax.scatter(y=df['index'],x=df['pct_2014'],s=50,color='#a3c4dc',alpha=0.7)# Line Segmentsfor i, p1, p2inzip(df['index'], df['pct_2013'], df['pct_2014']):    newline([p1, i], [p2, i])# Decorationax.set_facecolor('#f7f7f7')ax.set_title("Dumbell Chart: Pct Change - 2013 vs 2014",fontdict={'size':22})ax.set(xlim=(0,.25),ylim=(-1,27),ylabel='MeanGDP Per Capita')ax.set_xticks([.05, .1, .15, .20])ax.set_xticklabels(['5%', '15%', '20%', '25%'])ax.set_xticklabels(['5%', '15%', '20%', '25%'])    plt.show()

20. 连续变量的直方图

直方图显示给定变量的频率分布。下面的表示基于分类变量对频率条进行分组,从而更好地了解连续变量和串联变量。

# Import Datadf= pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")# Prepare datax_var= 'displ'groupby_var= 'class'df_agg= df.loc[:, [x_var, groupby_var]].groupby(groupby_var)vals= [df[x_var].values.tolist() for i, dfindf_agg]# Drawplt.figure(figsize=(16,9),dpi=80)colors= [plt.cm.Spectral(i/float(len(vals)-1)) for iinrange(len(vals))]n, bins,patches= plt.hist(vals,30,stacked=True,density=False,color=colors[:len(vals)])# Decorationplt.legend({group:col for group, colinzip(np.unique(df[groupby_var]).tolist(), colors[:len(vals)])})plt.title(f"Stacked Histogram of${x_var}$ colored by${groupby_var}$",fontsize=22)plt.xlabel(x_var)plt.ylabel("Frequency")plt.ylim(0,25)plt.xticks(ticks=bins[::3],labels=[round(b,1)for binbins[::3]])plt.show()

21. 类型变量的直方图

分类变量的直方图显示该变量的频率分布。通过对条形图进行着色,您可以将分布与表示颜色的另一个分类变量相关联。

# Import Datadf= pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")# Prepare datax_var= 'manufacturer'groupby_var= 'class'df_agg= df.loc[:, [x_var, groupby_var]].groupby(groupby_var)vals= [df[x_var].values.tolist() for i, dfindf_agg]# Drawplt.figure(figsize=(16,9),dpi=80)colors= [plt.cm.Spectral(i/float(len(vals)-1)) for iinrange(len(vals))]n, bins,patches= plt.hist(vals, df[x_var].unique().__len__(),stacked=True,density=False,color=colors[:len(vals)])# Decorationplt.legend({group:col for group, colinzip(np.unique(df[groupby_var]).tolist(), colors[:len(vals)])})plt.title(f"Stacked Histogram of${x_var}$ colored by${groupby_var}$",fontsize=22)plt.xlabel(x_var)plt.ylabel("Frequency")plt.ylim(0,40)plt.xticks(ticks=bins,labels=np.unique(df[x_var]).tolist(),rotation=90,horizontalalignment='left')plt.show()

22. 密度图

密度图是一种常用工具,可视化连续变量的分布。通过“响应”变量对它们进行分组,您可以检查X和Y之间的关系。以下情况,如果出于代表性目的来描述城市里程的分布如何随着汽缸数的变化而变化。

# Import Data

df = pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")

# Draw Plot

plt.figure(figsize=(16,10), dpi= 80)

sns.kdeplot(df.loc[df['cyl'] == 4, "cty"], shade=True, color="g", label="Cyl=4", alpha=.7)

sns.kdeplot(df.loc[df['cyl'] == 5, "cty"], shade=True, color="deeppink", label="Cyl=5", alpha=.7)

sns.kdeplot(df.loc[df['cyl'] == 6, "cty"], shade=True, color="dodgerblue", label="Cyl=6", alpha=.7)

sns.kdeplot(df.loc[df['cyl'] == 8, "cty"], shade=True, color="orange", label="Cyl=8", alpha=.7)

# Decoration

plt.title('Density Plot of City Mileage by n_Cylinders', fontsize=22)

plt.legend()

23. 直方密度线图

带有直方图的密度曲线将两个图表传达的集体信息汇集在一起,这样您就可以将它们放在一个图形而不是两个图形中。

# Import Datadf = pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")# Draw Plotplt.figure(figsize=(13,10), dpi=80)sns.distplot(df.loc[df['class'] =='compact',"cty"], color="dodgerblue",label="Compact", hist_kws={'alpha':.7}, kde_kws={'linewidth':3})sns.distplot(df.loc[df['class'] =='suv',"cty"], color="orange",label="SUV", hist_kws={'alpha':.7}, kde_kws={'linewidth':3})sns.distplot(df.loc[df['class'] =='minivan',"cty"], color="g",label="minivan", hist_kws={'alpha':.7}, kde_kws={'linewidth':3})plt.ylim(0,0.35)# Decorationplt.title('Density Plot of City Mileage by Vehicle Type', fontsize=22)plt.legend()plt.show()

24. Joy Plot

Joy Plot允许不同组的密度曲线重叠,这是一种可视化相对于彼此的大量组的分布的好方法。它看起来很悦目,并清楚地传达了正确的信息。它可以使用joypy基于的包来轻松构建matplotlib。

# !pip install joypy# Import Datampg= pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")# Draw Plotplt.figure(figsize=(16,10),dpi=80)fig,axes= joypy.joyplot(mpg,column=['hwy','cty'],by="class",ylim='own',figsize=(14,10))# Decorationplt.title('Joy Plot of CityandHighway Mileage by Class',fontsize=22)plt.show()

25. 分布式点图

分布点图显示按组分割的点的单变量分布。点数越暗,该区域的数据点集中度越高。通过对中位数进行不同着色,组的真实定位立即变得明显。

importmatplotlib.patches as mpatches# Prepare Datadf_raw= pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")cyl_colors= {4:'tab:red',5:'tab:green',6:'tab:blue',8:'tab:orange'}df_raw['cyl_color'] = df_raw.cyl.map(cyl_colors)# Mean and Median city mileage by makedf= df_raw[['cty', 'manufacturer']].groupby('manufacturer').apply(lambda x: x.mean())df.sort_values('cty',ascending=False,inplace=True)df.reset_index(inplace=True)df_median= df_raw[['cty', 'manufacturer']].groupby('manufacturer').apply(lambda x: x.median())# Draw horizontal linesfig,ax= plt.subplots(figsize=(16,10),dpi=80)ax.hlines(y=df.index,xmin=0,xmax=40,color='gray',alpha=0.5,linewidth=.5,linestyles='dashdot')# Draw the Dotsfor i, makeinenumerate(df.manufacturer):df_make= df_raw.loc[df_raw.manufacturer==make,:]    ax.scatter(y=np.repeat(i,df_make.shape[0]),x='cty',data=df_make,s=75,edgecolors='gray',c='w',alpha=0.5)ax.scatter(y=i,x='cty',data=df_median.loc[df_median.index==make,:],s=75,c='firebrick')# Annotate    ax.text(33,13,"$red ; dots ; are ; the : median$",fontdict={'size':12},color='firebrick')# Decorationsred_patch= plt.plot([],[],marker="o",ms=10,ls="",mec=None,color='firebrick',label="Median")plt.legend(handles=red_patch)ax.set_title('Distribution of City Mileage by Make',fontdict={'size':22})ax.set_xlabel('Miles Per Gallon (City)',alpha=0.7)ax.set_yticks(df.index)ax.set_yticklabels(df.manufacturer.str.title(),fontdict={'horizontalalignment':'right'},alpha=0.7)ax.set_xlim(1,40)plt.xticks(alpha=0.7)plt.gca().spines["top"].set_visible(False)    plt.gca().spines["bottom"].set_visible(False)    plt.gca().spines["right"].set_visible(False)    plt.gca().spines["left"].set_visible(False)   plt.grid(axis='both',alpha=.4,linewidth=.1)plt.show()

想要学会Python代码也变得像雷军一样优雅吗?下面小编就为大家送上干货,460集的Python课程免费送上~

领取方式:后台私信“资料”二字,即可免费领取~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345