Фильтр

Агропласт

# 使用Python实现简单的数据可视化 下面是一个使用Python的matplotlib和seaborn库创建数据可视化的示例。这个例子将展示如何创建多种类型的图表,并添加必要的样式和注释。 ```python import matplotlib.pyplot as plt import seaborn as sns import numpy as np import pandas as pd from matplotlib.patches import Rectangle # 设置中文字体和样式 plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS', 'DejaVu Sans'] plt.rcParams['axes.unicode_minus'] = False sns.set_style("whitegrid") # 创建示例数据 np.random.seed(42) categories = ['产品A', '产品B', '产品C', '产品D', '产品E'] sales_data = { '月份': ['1月', '2月', '3月', '4月', '5月', '6月'] * 5, '产品': np.repeat(categories, 6), '销售额': np.random.randint(50, 200, 30), '利润': np.random.randint(10, 80, 30) } df = pd.DataFrame(sales_data) # 创建多子图布局 fig = plt.figure(figsize=(16, 10)) fig.suptitle('产品销售数据分析报告', fontsize=18, fontweight='bold', y=0.98) # 1. 柱状图 - 各产品总销售额 ax1 = plt.subplot(2, 3, 1) product_totals = df.groupby('产品')['销售额'].sum().sort_values(ascending=False) bars = ax1.bar(product_totals.index, product_totals.values, color=sns.color_palette("husl", len(categories))) ax1.set_title('各产品总销售额对比', fontsize=14, fontweight='bold') ax1.set_ylabel('销售额 (万元)', fontsize=12) ax1.set_xlabel('产品', fontsize=12) # 在柱子上添加数值标签 for bar in bars: height = bar.get_height() ax1.text(bar.get_x() + bar.get_width()/2., height + 5, f'{int(height)}', ha='center', va='bottom', fontsize=10) # 2. 折线图 - 月度销售趋势 ax2 = plt.subplot(2, 3, 2) monthly_sales = df.pivot_table(index='月份', columns='产品', values='销售额', aggfunc='sum') months = ['1月', '2月', '3月', '4月', '5月', '6月'] monthly_sales = monthly_sales.reindex(months) for product in categories[:3]: # 只显示前3个产品,避免过于拥挤 ax2.plot(monthly_sales.index, monthly_sales[product], marker='o', linewidth=2.5, label=product) ax2.set_title('月度销售趋势 (前三产品)', fontsize=14, fontweight='bold') ax2.set_ylabel('销售额 (万元)', fontsize=12) ax2.set_xlabel('月份', fontsize=12) ax2.legend(loc='upper left') ax2.grid(True, alpha=0.3) # 3. 散点图 - 销售额与利润关系 ax3 = plt.subplot(2, 3, 3) scatter = ax3.scatter(df['销售额'], df['利润'], c=df['销售额'], cmap='viridis', s=100, alpha=0.7, edgecolors='black') ax3.set_title('销售额与利润关系', fontsize=14, fontweight='bold') ax3.set_ylabel('利润 (万元)', fontsize=12) ax3.set_xlabel('销售额 (万元)', fontsize=12) # 添加颜色条 cbar = plt.colorbar(scatter, ax=ax3) cbar.set_label('销售额强度', fontsize=10) # 添加趋势线 z = np.polyfit(df['销售额'], df['利润'], 1) p = np.poly1d(z) ax3.plot(df['销售额'], p(df['销售额']), "r--", alpha=0.8, linewidth=2) # 4. 箱线图 - 各产品销售额分布 ax4 = plt.subplot(2, 3, 4) box_data = [df[df['产品'] == cat]['销售额'].values for cat in categories] box_plot = ax4.boxplot(box_data, labels=categories, patch_artist=True) ax4.set_title('各产品销售额分布', fontsize=14, fontweight='bold') ax4.set_ylabel('销售额 (万元)', fontsize=12) ax4.set_xlabel('产品', fontsize=12) # 设置箱线图颜色 colors = sns.color_palette("Set2", len(categories)) for patch, color in zip(box_plot['boxes'], colors): patch.set_facecolor(color) patch.set_alpha(0.7) # 5. 饼图 - 各产品销售额占比 ax5 = plt.subplot(2, 3, 5) explode = [0.05] * len(categories) # 轻微突出所有部分 wedges, texts, autotexts = ax5.pie(product_totals.values, labels=product_totals.index, autopct='%1.1f%%', startangle=90, explode=explode, colors=sns.color_palette("pastel", len(categories)), shadow=True) ax5.set_title('各产品销售额占比', fontsize=14, fontweight='bold') # 美化百分比文本 for autotext in autotexts: autotext.set_color('darkblue') autotext.set_fontsize(10) autotext.set_fontweight('bold') # 6. 热力图 - 各产品月度销售热图 ax6 = plt.subplot(2, 3, 6) heatmap_data = df.pivot_table(index='产品', columns='月份', values='销售额', aggfunc='sum') heatmap_data = heatmap_data.reindex(categories).reindex(columns=months) im = ax6.imshow(heatmap_data, cmap='YlOrRd', aspect='auto') ax6.set_title('各产品月度销售热图', fontsize=14, fontweight='bold') ax6.set_xlabel('月份', fontsize=12) ax6.set_ylabel('产品', fontsize=12) ax6.set_xticks(np.arange(len(months))) ax6.set_yticks(np.arange(len(categories))) ax6.set_xticklabels(months) ax6.set_yticklabels(categories) # 在热力图中添加数值 for i in range(len(categories)): for j in range(len(months)): value = heatmap_data.iloc[i, j] if not np.isnan(value): text = ax6.text(j, i, int(value), ha="center", va="center", color="black" if value < heatmap_data.values.mean() else "white", fontsize=9, fontweight='bold') # 添加颜色条 cbar = plt.colorbar(im, ax=ax6) cbar.set_label('销售额 (万元)', fontsize=10) # 调整布局 plt.tight_layout(rect=[0, 0, 1, 0.96]) # 添加整体注释 fig.text(0.02, 0.02, '数据来源: 模拟销售数据 | 生成日期: 2023年', fontsize=10, style='italic', alpha=0.7) # 保存图表 plt.savefig('data_visualization_dashboard.png', dpi=300, bbox_inches='tight') plt.show() # 输出数据统计摘要 print("="*60) print("数据统计摘要") print("="*60) print(f"数据集形状: {df.shape}") print(f"时间范围: {df['月份'].min()} 到 {df['月份'].max()}") print(f"产品数量: {df['产品'].nunique()}") print(f"总销售额: {df['销售额'].sum():.0f} 万元") print(f"平均销售额: {df['销售额'].mean():.1f} 万元") print(f"销售额标准差: {df['销售额'].std():.1f} 万元") print(f"最高销售额产品: {product_totals.idxmax()} ({product_totals.max():.0f} 万元)") print("="*60) ``` ## 代码说明 这个数据可视化示例包含以下特点: 1. **多种图表类型**: - 柱状图:展示各产品总销售额对比 - 折线图:显示月度销售趋势 - 散点图:分析销售额与利润的关系 - 箱线图:展示各产品销售额分布 - 饼图:
Загрузка комментариев...