import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# %matplotlib inline
import seaborn as sns
import statsmodels as sm
from numpy.random import randn
from datetime import datetime
# #1.matplotlib API入门
# data = np.arange(10)
# plt.plot(data)
# #plt.show()#查看图片
#
# #Figure和Subplot
# #matplotlib的图像都位于Figure对象中。你可以用plt.figure创建一个新的Figure
# fig = plt.figure()
# #图像应该是2×2的(即最多4张图),且当前选中的是4个subplot中的第一个(编号从1开始),这四张图在一张图片里。
# ax1 = fig.add_subplot(2, 2, 1)
# #绘制其它三张图
# ax2 = fig.add_subplot(2, 2, 2)
# ax3 = fig.add_subplot(2, 2, 3)
# ax4 = fig.add_subplot(2, 2, 4)
# #在最后一张图里绘制
# plt.plot(np.random.randn(50).cumsum(), 'k--')#"k--"是一个线型选项,用于告诉matplotlib绘制黑色虚线图
# #在其它格子里画图
# ax1.hist(np.random.randn(100), bins=20, color='k', alpha=0.3)
# ax2.scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30))
# #fig.show()#查看
# #matplotlib有一个更为方便的方法plt.subplots,它可以创建一个新的Figure,并返回一个含有已创建的subplot对象的NumPy数组
# fig, axes = plt.subplots(2, 3)
# print(axes)#可以对axes索引得到每一张图片,类似前面的ax1、ax2等
# #fig.show()
#调整subplot周围的间距
#利用Figure的subplots_adjust方法可以轻而易举地修改间距
#subplots_adjust(left=None, bottom=None, right=None, top=None,wspace=None, hspace=None)后两个控制宽度和高度的百分比,可以用作subplot之间的间距
# fig, axes = plt.subplots(2, 2, sharex=True, sharey=True)
# for i in range(2):
# for j in range(2):
# axes[i, j].hist(np.random.randn(500), bins=50, color='k', alpha=0.5)
# plt.subplots_adjust(wspace=0, hspace=0)#这里设置了四张图的间距为零
#plt.show()
# #颜色、标记和线型
# #plot函数接受一组X和Y坐标,还可以接受一个表示颜色和线型的字符串缩写。
# #plt.plot([1,2,3,4,5,6],[5,7,8,3,6,4], 'ko--')#ko--中的o代表标记强调数据点
# #plt.show()
# #在线型图中,非实际数据点默认是按线性方式插值的。可以通过drawstyle选项修改
# data = np.random.randn(30).cumsum()
# plt.plot(data, 'k--', label='Default')#label是显示在图片左上角的不同线条类型的说明,plot函数可以多次设置,设置多条线
# plt.plot(data, 'k-', drawstyle='steps-post', label='steps-post')
# #你必须调用plt.legend(或使用ax.legend,如果引用了轴的话)来创建图例,无论你绘图时是否传递label标签选项。
# plt.legend(loc='best')
# plt.show()
# #设置标题、轴标签、刻度以及刻度标签
# fig = plt.figure()
# ax = fig.add_subplot(1, 1, 1)
# ax.plot(np.random.randn(1000).cumsum())
# #要改变x轴刻度,最简单的办法是使用set_xticks和set_xticklabels。前者告诉matplotlib要将刻度放在数据范围中的哪些位置,
# # 默认情况下,这些位置也就是刻度标签。但我们可以通过set_xticklabels将任何其他的值用作标签:
# ticks = ax.set_xticks([0, 250, 500, 750, 1000])
# labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'],
# rotation=30, fontsize='small')#rotation选项设定x刻度标签倾斜30度。
# ax.set_title('My first matplotlib plot')#设置图片标题
# ax.set_xlabel('Stages')#设置x轴名称
# #前面设置标题的另一种写法,更直观明了
# props = {
# 'title': 'My first matplotlib plot',
# 'xlabel': 'Stages',
# 'ylabel':'Y'
# }
# ax.set(**props)
# plt.show()
#添加图例
#图例(legend)是另一种用于标识图表元素的重要工具。添加图例的方式有多种。最简单的是在添加subplot的时候传入label参数
fig = plt.figure(); ax = fig.add_subplot(1, 1, 1)
ax.plot(randn(1000).cumsum(), 'k', label='one')
ax.plot(randn(1000).cumsum(), 'k--', label='two')
ax.plot(randn(1000).cumsum(), 'k.', label='three')
#loc告诉matplotlib要将图例放在哪。如果你不是吹毛求疵的话,"best"是不错的选择,因为它会选择最不碍事的位置。要从图例中去除一个或多个元素,不传入label或传入label='nolegend'即可。
ax.legend(loc='best')#设置那些线条说明的位置,即图例
fig.show()
# #注解以及在Subplot上绘图
# fig = plt.figure()
# ax = fig.add_subplot(1, 1, 1)
#
# data = pd.read_csv('../examples/spx.csv', index_col=0, parse_dates=True)
# spx = data['SPX']
#
# spx.plot(ax=ax, style='k-')
#
# crisis_data = [
# (datetime(2007, 10, 11), 'Peak of bull market'),
# (datetime(2008, 3, 12), 'Bear Stearns Fails'),
# (datetime(2008, 9, 15), 'Lehman Bankruptcy')
# ]
#
# for date, label in crisis_data:
# #ax.annotate方法可以在指定的x和y坐标轴绘制标签。
# ax.annotate(label, xy=(date, spx.asof(date) + 75),
# xytext=(date, spx.asof(date) + 225),
# arrowprops=dict(facecolor='black', headwidth=4, width=2,
# headlength=4),
# horizontalalignment='left', verticalalignment='top')
#
# # Zoom in on 2007-2010
# #使用set_xlim和set_ylim人工设定起始和结束边界
# ax.set_xlim(['1/1/2007', '1/1/2011'])
# ax.set_ylim([600, 1800])
#
# ax.set_title('Important dates in the 2008-2009 financial crisis')
# plt.show()
#将图表保存到文件,文件类型是通过文件扩展名推断出来的,在发布图片时最常用到两个重要的选项是dpi(控制“每英寸点数”分辨率)和bbox_inches(可以剪除当前图表周围的空白部分)。
#保存为svg文件
#plt.savefig('figpath.svg')
#保存为png文件,
#plt.savefig('figpath.png', dpi=400, bbox_inches='tight')#tight设置可以尝试减掉图表周围空白部分
# #matplotlib配置
# #python配置matplotlib一般用rc方法
# plt.rc('figure', figsize=(10, 10))#将全局的图像默认大小设置为10×10
# #rc的第一个参数是希望自定义的对象,如'figure'、'axes'、'xtick'、'ytick'、'grid'、'legend'等。其后可以跟上一系列的关键字参数。一个简单的办法是将这些选项写成一个字典:
# font_options = {'family' : 'monospace',
# 'weight' : 'bold',
# 'size' : 'small'}
# plt.rc('font', **font_options)
#2 使用pandas和seaborn绘图
# #线型图
# fig = plt.figure()
# ax=fig.add_subplot(1,1,1)
# # s = pd.Series(np.random.randn(10).cumsum(), index=np.arange(0, 100, 10))
# # ax=s.plot()
#
# df = pd.DataFrame(np.random.randn(10, 4).cumsum(0),
# columns=['A', 'B', 'C', 'D'],
# index=np.arange(0, 100, 10))
# ax=df.plot()
# fig.show()
#柱状图
# fig=plt.figure()
# ax = plt.subplot(1, 1,1)
# # data = pd.Series(np.random.rand(16), index=list('abcdefghijklmnop'))
# # data.plot.bar(ax=axes[0], color='k', alpha=0.7)
# # data.plot.barh(ax=axes[1], color='k', alpha=0.7)
# df = pd.DataFrame(np.random.rand(6, 4),
# index=['one', 'two', 'three', 'four', 'five', 'six'],
# columns=pd.Index(['A', 'B', 'C', 'D'], name='Genus'))
# ax=df.plot.bar()
# plt.show()
# fig.savefig("zsad.png")
# tips = pd.read_csv('../examples/tips.csv')
# party_counts = pd.crosstab(tips['day'], tips['size'])
# party_counts = party_counts.loc[:, 2:5]
# party_pcts = party_counts.div(party_counts.sum(1), axis=0)
# fig=plt.figure()
# ax=fig.add_subplot(1,1,1)
# ax=party_pcts.plot.bar()
# ax.legend(loc="best")
# plt.show()
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步