import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams[ ' font.sans-serif ' ] = [ ' SimHei ' ] # 指定默认字体 mpl.rcParams[ ' axes.unicode_minus ' ] = False # 解决保存图像是负号'-'显示为`a方块的问题 """ 准备数据 """ data =pd.DataFrame(data={ ' rank ' :[10,9, 8, 7, 6, 5, 4, 3, 2, 1 ], ' city ' :[ ' 杭州 ' , ' 武汉 ' , ' 成都 ' , ' 苏州 ' , ' 重庆 ' , ' 天津 ' , ' 广州 ' , ' 深圳 ' , ' 北京 ' , ' 上海 ' ], ' GDP ' :[6949,6949, 7702, 9548, 10335, 10371, 11756, 12134, 15212, 16410 ]}) # 散点大小 ,由GDP数值归一化到0-500 data[ ' size ' ]=data[ ' GDP ' ]*500/(data[ ' GDP ' ].max()-data[ ' GDP ' ].min()) # 圆点颜色值 rgb十六进制 data[ ' color ' ]=[ ' #FFBA08 ' , ' #FAA307 ' , ' #F48C06 ' , ' #E85D04 ' , ' #DC2F02 ' , ' #D00000 ' , ' #9D0208 ' , ' #6A040F ' , ' #370617 ' , ' #03071E ' ] # 圆点Y值 data[ ' Y ' ]=10-data[ ' rank ' ] fig,ax =plt.subplots(1,1,dpi=300 ) # 隐藏y轴 ax.get_yaxis().set_visible(False) # 将刻度小横线设置为白色,标签颜色为黑色 plt.tick_params(axis= ' x ' ,color= ' w ' ,labelcolor= ' #3d405b ' ) # x,y轴刻度范围 ax.set_xlim(6000,18001 ) ax.set_xticks(range( 4000,19000,2000 )) ax.set_ylim( -1,10 ) # 画 x,y水平线,设置颜色,线类型,和线宽度 for i in range(6000,19000,2000 ): ax.axvline(x =i,c= " gray " ,ls= " - " ,lw=0.1 ) for y in range(10 ): ax.axhline(y =y,c= " gray " ,ls= " - " ,lw=0.1 ) # 画散点图,传入s参数,绘制不同面积的圆点 ax.scatter( ' GDP ' , ' city ' , c= ' color ' , s= ' size ' , data=data) # c : color s :size 这里传入了序列 # 标注圆点文字,设置圆点内文字大小,gdp越高文字越大 data[ ' text_size ' ]=[9,9,9,10,10,11,11,11,12,12 ] for rank,city in zip(data[ ' rank ' ],data[ ' city ' ]): gdp =data[data[ ' city ' ]==city][ ' GDP ' ] text_size =data[data[ ' city ' ]==city][ ' text_size ' ] ax.text(gdp -500*text_size/12,10-rank-0.1,city,fontdict={ ' color ' : ' w ' , ' size ' :text_size},fontweight= ' heavy ' ) # 去掉上下左右外框 for i in [ ' top ' , ' right ' , ' left ' , ' bottom ' ]: ax.spines[i].set_visible(False) plt.title( " 2019上半年中国城市GDP(亿元)排名 " ) plt.savefig( " 城市GDP2.png " ) plt.show() import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams[ ' font.sans-serif ' ] = [ ' SimHei ' ] # 指定默认字体 mpl.rcParams[ ' axes.unicode_minus ' ] = False # 解决保存图像是负号'-'显示为`a方块的问题 """ 准备数据 """ data =pd.DataFrame(data={ ' rank ' :[10,9, 8, 7, 6, 5, 4, 3, 2, 1 ], ' city ' :[ ' 杭州 ' , ' 武汉 ' , ' 成都 ' , ' 苏州 ' , ' 重庆 ' , ' 天津 ' , ' 广州 ' , ' 深圳 ' , ' 北京 ' , ' 上海 ' ], ' GDP ' :[6949,6949, 7702, 9548, 10335, 10371, 11756, 12134, 15212, 16410 ]}) # 散点大小 ,由GDP数值归一化到0-500 data[ ' size ' ]=data[ ' GDP ' ]*500/(data[ ' GDP ' ].max()-data[ ' GDP ' ].min()) # 圆点颜色值 rgb十六进制 data[ ' color ' ]=[ ' #FFBA08 ' , ' #FAA307 ' , ' #F48C06 ' , ' #E85D04 ' , ' #DC2F02 ' , ' #D00000 ' , ' #9D0208 ' , ' #6A040F ' , ' #370617 ' , ' #03071E ' ] # 圆点Y值 data[ ' Y ' ]=10-data[ ' rank ' ] # 开始画图 fig,ax=plt.subplots(1,1,dpi=300 ) # 将刻度小横线设置为白色,标签颜色为深蓝色 plt.tick_params(axis= ' x ' ,color= ' w ' ,labelcolor= ' #3d405b ' ) plt.tick_params(axis = ' y ' ,color= ' w ' ,labelcolor= ' #3d405b ' ) # x,y轴刻度范围 ax.set_xlim(6000,18001 ) ax.set_xticks(range( 4000,19000,2000 )) # y轴标签 ylabels=data[ ' city ' ].tolist() ax.set_ylim( -1,10 ) ax.set_yticklabels(ylabels) # 画 x,y水平线,设置颜色,线类型,和线宽度 for i in range(6000,19000,2000 ): ax.axvline(x =i,c= " gray " ,ls= " - " ,lw=0.3 ) for y in range(10 ): ax.axhline(y =y,c= " gray " ,ls= " - " ,lw=0.3 ) # 画散点图 设置圆点内文字大小,gdp越高文字越大 ax.scatter( ' GDP ' , ' city ' , c= ' color ' , s= ' size ' , data=data) # c : color s :size 这里传入了序列 # 隐藏上下左右外边框 for i in [ ' top ' , ' right ' , ' left ' , ' bottom ' ]: ax.spines[i].set_visible(False) plt.title( " 2019上半年中国城市GDP(亿元)排名 " ) plt.savefig( " 城市GDP.png " ) plt.show() plt.close()