【数据分析day06】matplotlib 2D图

直方图

  • 参数只有一个x,一维数据

  • hist()的参数

    1. bins: 可以是一个bin数量的整数值,也可以是表示bin的一个序列。默认值为10
    2. density: 如果值为True,直方图的值将进行归一化处理,形成概率密度,默认值为False
    3. color : 单一颜色值或颜色的序列
    4. orientation: horizontal创建水平直方图,默认值为vertical

    n = np.random.randint(0, 10, size=10)
    n
    在这里插入图片描述

      np.histogram(n)
    

    在这里插入图片描述

      plt.hist(n)
    

    在这里插入图片描述

绘图

plt.hist(n)

在这里插入图片描述
水平方向

plt.hist(n, density=True, bins=20, color='r', orientation='horizontal')

在这里插入图片描述

条形图

  • 必须传两个参数,是二维

  • bar(), barh()

  • 适合比较各部分的大小

     plt.bar(np.arange(0,10), n, color='r', width=0.8)
    

    在这里插入图片描述
    水平条形图: barh()

     plt.barh(np.arange(0,10), n, color='r')
    

    在这里插入图片描述

饼图

  • 只有一个参数,一维

  • pie()

  • 适合展示各部分占总体的比例

      plt.figure(figsize=(8,8))
      n = [1,2,3,4]
      # pct = pecentage export
      plt.pie(n, autopct='%.2f%%', labels=list('ABCD'), pctdistance=0.8, labeldistance=1, shadow=True, explode=[0.1, 0.2, 0.1, 0.3], colors=['r', 'g', 'b', 'y'],
     startangle=60, counterclock=False, radius=1, wedgeprops = {'linewidth': 5},textprops=dict(fontsize=20, color='r'))
    

    在这里插入图片描述普通未占满饼图

      n = [0.1, 0.2, 0.4, 0.2]
      plt.pie(n)
    

    在这里插入图片描述

饼图阴影、分裂等属性设置
在这里插入图片描述

散点图

  • 需要两个参数x,y,但此时x不是表示x轴的刻度,而是每个点的横坐标

  • 两个一维数组之间的关系

      x = np.linspace(0, 2*np.pi, 10)
      y = np.sin(x)
    

s表示点的大小,c:颜色(这里用random+cmap组合使用), mark:点的形状
alpha:透明度

plt.scatter(x, y, s=200,  c=np.random.rand(10,3), marker='d', cmap='rainbow', alpha=0.5)	

在这里插入图片描述
例子

x = np.random.randn(500)
y = np.random.randn(500)

plt.figure(figsize=(10,6))
# RGBA
plt.scatter(x,y, marker='d', c=np.random.rand(500,4), cmap='rainbow', s=np.random.randint(0,300, size=150))

在这里插入图片描述

<think>好的,我现在需要帮助用户了解Matplotlib、Seaborn、Plotly和ECharts这四个可视化库的使用方法和示例。首先,我应该回顾用户提供的引用内容,看看里面有没有相关的信息。用户之前提到了Matplotlib和Seaborn的示例代码,比如绘制正弦曲线、直方、箱线、热和散点。还有提到Plotly和ECharts,但用户提供的引用中没有具体提到这两个库的示例。 接下来,我需要确保回答结构清晰,按照用户的要求分点说明每个库的用法,并提供示例代码。用户可能需要的是基础但全面的介绍,所以每个库都应该涵盖基本绘方法,可能的高级功能,以及如何安装或配置。 首先,Matplotlib是Python中最基础的绘库,用户已经展示了一个简单的线例子,我可以补充其他类型的表,如散点、柱状,并提到子的使用。然后,Seaborn是基于Matplotlib的高级库,更适合统计表,用户提到的直方、箱线、热和散点已经覆盖,可以再补充一些其他表类型,比如分面网格。 Plotly和ECharts用户没有提供示例,需要我来补充。Plotly支持交互式表,可以展示3D和动态表,而ECharts是百度开发的,适合网页应用,有丰富的交互选项。我需要为这两个库提供基本的示例代码,比如使用Plotly创建交互式线、散点和3D,ECharts的HTML示例,展示折线、柱状和饼。 另外,用户可能关心这些库的优缺点和适用场景,所以最后做一个对比表格会比较有帮助。需要指出每个库的特点,比如Matplotlib的灵活性,Seaborn的统计表,Plotly的交互性,ECharts的Web集成。 还要确保代码示例正确,并且符合用户的格式要求,行内数学表达式用$...$,独立公式用$$...$$。但在这个问题中可能不需要数学公式,但要注意代码块的格式是否正确,比如使用三个反引号包裹代码,并注明语言类型。 另外,用户提到生成相关问题,我需要根据回答内容提出几个相关的问题,比如如何选择适合的可视化库,如何处理大数据集时的性能问题,以及如何定制表样式等。 最后,检查是否引用了用户提供的引用内容。用户提供的引用[1]和[2]主要涉及Matplotlib和Seaborn,所以需要在相关部分添加引用标识,例如在提到Seaborn时添加[^1],在综合使用Matplotlib和Seaborn时添加[^2]。 可能需要注意的几点: 1. 确保每个库的示例代码正确,并且语法无误。 2. 对比表格要简明扼要,突出各库的优势和局限。 3. 相关问题要围绕用户可能的后续疑问展开。 4. 使用中文回答,避免专业术语过多,保持易懂。 5. 检查是否有遗漏的可视化库功能,比如Plotly的Dash框架或ECharts的地可视化。 现在开始组织内容,分四个部分介绍每个库,每个部分包括简介、示例代码和输出说明,然后对比总结,最后生成相关问题。</think>### 可视化技术详解与示例 #### 一、Matplotlib(基础绘库) **核心功能** - 支持$2D/3D$形绘制 - 提供底层绘接口 **示例代码** 1. **折线**(动态数据展示) ```python import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 10, 100) y = np.sin(x) * np.exp(-x/5) plt.figure(figsize=(8,4)) plt.plot(x, y, 'g--', linewidth=2, label='衰减正弦波') plt.fill_between(x, y, alpha=0.2) # 填充曲线下方区域 plt.title('动态衰减波形', fontsize=14) plt.grid(True, linestyle=':') plt.legend() plt.show() ``` ![Matplotlib折线](https://via.placeholder.com/400x300?text=SinDecay+Plot) 2. **多子布局** ```python fig, axs = plt.subplots(2, 2, figsize=(10,8)) axs[0,0].plot(x, np.sin(x), color='#FF6F61') # 使用HEX颜色 axs[0,1].scatter(np.random.rand(50), np.random.rand(50)) axs[1,0].bar(['A','B','C'], [3,7,4], color=['#4ECDC4','#45B7D1','#FF6B6B']) axs[1,1].hist(np.random.normal(size=1000), bins=30, edgecolor='black') plt.tight_layout() ``` #### 二、Seaborn(统计可视化) **优势** - 内置统计模型可视化方法[^1] - 自动美化默认样式 **示例代码** 1. **分类散点** ```python import seaborn as sns tips = sns.load_dataset("tips") sns.catplot( x="day", y="total_bill", hue="sex", data=tips, kind="violin", split=True, palette="pastel", height=6, aspect=1.5 ) plt.title('每日消费金额分布(按性别)', pad=20) ``` ![Seaborn分类](https://via.placeholder.com/400x300?text=Violin+Plot) 2. **回归分析** ```python sns.jointplot( x="total_bill", y="tip", data=tips, kind="reg", marginal_kws={'color':'#7BC043'}, line_kws={'color':'#F96167'} ) ``` #### 三、Plotly(交互式可视化) **特性** - 支持$3D$动态旋转 - 数据点悬停显示 **示例代码** ```python import plotly.express as px df = px.data.gapminder() fig = px.scatter_3d( df.query("year==2007"), x="gdpPercap", y="lifeExp", z="pop", size="pop", color="continent", hover_name="country", log_x=True, size_max=60, title="全球发展指标3D视" ) fig.update_layout(scene=dict( xaxis_title="人均GDP(对数)", yaxis_title="预期寿命", zaxis_title="人口总量" )) fig.show() ``` ![Plotly3D](https://via.placeholder.com/400x300?text=3D+Scatter) #### 四、ECharts(Web可视化) **核心能力** - 地理信息可视化 - 时间轴动态演示 **HTML示例** ```html <div id="main" style="width:600px;height:400px"></div> <script> var chart = echarts.init(document.getElementById('main')); var option = { timeline: { data: ['2018', '2019', '2020'] }, baseOption: { title: { text: '企业营收动态演示' }, series: [{ type: 'pie', radius: ['30%', '55%'], label: { formatter: '{b}: {d}%' } }] }, options: [ { series: [{ data: [{value:235,name:'产品A'}, {value:274,name:'产品B'}] }] }, { series: [{ data: [{value:387,name:'产品A'}, {value:300,name:'产品B'}] }] }, { series: [{ data: [{value:581,name:'产品A'}, {value:483,name:'产品B'}] }] } ] }; chart.setOption(option); </script> ``` ### 技术对比矩阵 | 维度 | Matplotlib | Seaborn | Plotly | ECharts | |---------------|------------------|------------------|------------------|------------------| | **交互性** | 静态像 | 静态像 | 高交互性 | 网页端交互 | | **学习曲线** | 需掌握API细节 | 语法简化 | 中等难度 | 配置式开发 | | **渲染性能** | 10万级数据点 | 5万级数据点 | WebGL加速 | Canvas/SVG混合 | | **典型应用** | 科研论文插 | 统计分析报告 | 仪表盘开发 | 商业BI系统 | ### 进阶应用场景 - **Matplotlib动画**:使用`FuncAnimation`创建动态演示 ```python from matplotlib.animation import FuncAnimation fig, ax = plt.subplots() line, = ax.plot([], [], 'r-') ax.set_xlim(0, 2*np.pi) ax.set_ylim(-1, 1) def animate(frame): x = np.linspace(0, 2*np.pi, 100) y = np.sin(x + frame/10) line.set_data(x, y) return line, ani = FuncAnimation(fig, animate, frames=100, interval=50) plt.show() ``` - **ECharts异步加载**:实现大数据量分块加载 ```javascript function fetchData() { chart.showLoading(); $.get('bigdata.json').done(function(data) { chart.setOption({ dataset: { source: data }, series: [{ type: 'scatter' }] }); chart.hideLoading(); }); } ``` ### 相关问题 1. 如何选择适合超大规模数据集(千万级)的可视化方案? 2. 在Web应用中如何实现ECharts与后端Python的数据实时交互? 3. Plotly Dash框架与传统Web开发有何优势? 4. 如何通过Seaborn快速生成统计检验可视化报告? 5. Matplotlib如何导出矢量用于学术出版?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值