Python做统计图之美

news2024/11/13 12:50:47

Python数据分析可视化

案例效果图

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib

# 数据
data = {
    "房型": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
    "住宅类型": ["普通宅", "普通宅", "普通宅", "非普通宅", "非普通宅", "非普通宅", "非普通宅", "非普通宅", "其他", "其他", "非普通宅"],
    "容积率": ["列入", "列入", "列入", "列入", "列入", "列入", "列入", "列入", "不列入", "不列入", "不列入"],
    "开发成本": [4263, 4323, 4532, 5288, 5268, 5533, 5685, 4323, 2663, 2791, 2982],
    "房型面积": [77, 98, 117, 145, 156, 167, 178, 126, 103, 129, 133],
    "建房套数": [250, 250, 150, 250, 250, 250, 250, 75, 150, 150, 75],
    "开发成本 (元/)": [4263, 4323, 4532, 5288, 5268, 5533, 5685, 4323, 2663, 2791, 2982],
    "售价 (元/)": [12000, 10800, 11200, 12800, 12800, 13600, 14000, 10400, 6400, 6800, 7200]
}

# 创建 DataFrame
df = pd.DataFrame(data)

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文显示
plt.rcParams['axes.unicode_minus'] = False  # 负号显示

# 创建柱状图
plt.figure(figsize=(12, 7))

# 华尔街日报风格的颜色
colors = ['#003f5c', '#2f4b7c', '#665191', '#a05195', '#d45087',
          '#f95d6a', '#ff7c43', '#ffa600', '#ffd700', '#f0e0d0', '#c2c2c2']

# 绘制柱状图
bars = plt.bar(df["房型"].astype(str), df["建房套数"], color=colors, edgecolor='black')

# 添加数据标签
for bar in bars:
    yval = bar.get_height()
    plt.text(bar.get_x() + bar.get_width()/2, yval + 10, f'{yval}', ha='center', va='bottom', fontsize=10, fontweight='bold', color='black')

# 设置x轴刻度标签
plt.xticks(df["房型"].astype(str), [f'房型{i}' for i in df["房型"]], fontsize=12)

# 设置轴标签和标题
plt.ylabel('建房套数', fontsize=12)
plt.title('不同房型的建房套数', fontsize=14, fontweight='bold')

# 添加网格线
plt.grid(axis='y', linestyle='--', alpha=0.7)

# 自动调整图表边距以确保内容显示完整
plt.tight_layout()

# 显示图形
plt.show()

图形效果:
在这里插入图片描述

这个图的配色比较好看。

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rcParams

# 数据
data = {
    "房型": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
    "住宅类型": ["普通宅", "普通宅", "普通宅", "非普通宅", "非普通宅", "非普通宅", "非普通宅", "非普通宅", "其他", "其他", "非普通宅"],
    "容积率": ["列入", "列入", "列入", "列入", "列入", "列入", "列入", "列入", "不列入", "不列入", "不列入"],
    "开发成本": [4263, 4323, 4532, 5288, 5268, 5533, 5685, 4323, 2663, 2791, 2982],
    "房型面积": [77, 98, 117, 145, 156, 167, 178, 126, 103, 129, 133],
    "建房套数": [250, 250, 150, 250, 250, 250, 250, 75, 150, 150, 75],
    "开发成本 (元/平方米)": [4263, 4323, 4532, 5288, 5268, 5533, 5685, 4323, 2663, 2791, 2982],
    "售价 (元/平方米)": [12000, 10800, 11200, 12800, 12800, 13600, 14000, 10400, 6400, 6800, 7200]
}

# 创建 DataFrame
df = pd.DataFrame(data)

# 设置字体
rcParams['font.sans-serif'] = ['SimHei']  # 例如,使用 SimHei 字体显示中文
rcParams['axes.unicode_minus'] = False    # 显示负号

# 创建散点图
plt.figure(figsize=(14, 7))
scatter = plt.scatter(df["房型面积"], df["售价 (元/平方米)"], c=df["开发成本"], cmap='viridis', s=100, edgecolors='k')
plt.colorbar(scatter, label='开发成本 (元/平方米)')
plt.xlabel('房型面积 (平方米)')
plt.ylabel('售价 (元/平方米)')
plt.title('房型面积与售价以及成本的关系')
plt.grid(True)

# 在每个数据点上标记房型,保持一定距离
for i in range(len(df)):
    plt.text(df["房型面积"][i] + 2, df["售价 (元/平方米)"][i] + 200, f'房型{i + 1}', fontsize=9, ha='left')

plt.show()

散点图效果如下:
在这里插入图片描述

散点图可以同时反应3个关系。

import pandas as pd
import matplotlib.pyplot as plt

# 数据
data = {
    "房型": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
    "建房套数": [250, 250, 150, 250, 250, 250, 250, 75, 150, 150, 75]
}

# 创建 DataFrame
df = pd.DataFrame(data)

# 饼图绘制
plt.figure(figsize=(10, 8))

# 高级感配色方案
colors = ['#6C5B7B', '#C06C84', '#F67280', '#F8B195', '#F9D5A8', 
          '#F3B6A3', '#E1C6C1', '#D9B8C4', '#C9A7B4', '#B68583', '#A9A5A0']

# 绘制饼图
plt.pie(df["建房套数"], labels=[f'房型{i}' for i in df["房型"]], colors=colors, autopct='%1.1f%%', startangle=140, wedgeprops={'edgecolor': 'black'})

# 添加标题
plt.title('不同房型建造套数的占比')

# 显示图形
plt.show()

一个简单的饼图:

在这里插入图片描述

看起来比较清爽。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm, colors

# 设置支持中文的字体(使用默认的或者系统中可用的字体)
plt.rcParams['font.sans-serif'] = ['SimHei']  # SimHei 是黑体字的中文字体
plt.rcParams['axes.unicode_minus'] = False   # 解决负号 '-' 显示问题

# 提供的数据
labels = ['房型 1', '房型 2', '房型 3', '房型 4', '房型 5', '房型 6', '房型 7', '房型 8', '房型 9', '房型 10', '房型 11']
heights = [0.0606, 0.0909, 0.0758, 0.0909, 0.1061, 0.1212, 0.1364, 0.0909, 0.0303, 0.0455, 0.0606]

# 按高度排序数据(顺时针递增)
sorted_indices = np.argsort(heights)
sorted_labels = [labels[i] for i in sorted_indices]
sorted_heights = [heights[i] for i in sorted_indices]

# 创建反转渐变色
cmap = cm.get_cmap('plasma_r')  # 使用反转的渐变色
norm = colors.Normalize(vmin=min(sorted_heights), vmax=max(sorted_heights))
colors_map = [cmap(norm(height)) for height in sorted_heights]

# 设置图形和极坐标
plt.figure(figsize=(12, 12))
ax = plt.subplot(111, polar=True)

# 设置高度和宽度
width = 2 * np.pi / len(sorted_heights)
angles = [i * width for i in range(len(sorted_heights))]

# 绘制条形图
bars = ax.bar(x=angles, height=sorted_heights, width=width, bottom=0,
              linewidth=1, edgecolor="white", color=colors_map)

# 标签设置
labelPadding = 0.02  # 调整标签与条形的距离
for bar, angle, height, label in zip(bars, angles, sorted_heights, sorted_labels):
    rotation = np.rad2deg(angle)
    alignment = "left"
    if angle >= np.pi / 2 and angle < 3 * np.pi / 2:
        alignment = "right"
        rotation = rotation + 180
    ax.text(x=angle, y=bar.get_height() + labelPadding,
            s=label, ha=alignment, va='center', rotation=rotation,
            rotation_mode="anchor")

ax.set_thetagrids([], labels=[])
plt.show()

这是一个比较亮眼的图:
在这里插入图片描述

有点像旋转楼梯一样。

import matplotlib.pyplot as plt
import numpy as np

# 提供的数据
labels = ['房型 1', '房型 2', '房型 3', '房型 4', '房型 5', '房型 6', '房型 7', '房型 8', '房型 9', '房型 10', '房型 11']
values = [0.0606, 0.0909, 0.0758, 0.0909, 0.1061, 0.1212, 0.1364, 0.0909, 0.0303, 0.0455, 0.0606]

# 计算角度和条形宽度
angles = np.linspace(0, 2 * np.pi, len(labels), endpoint=False).tolist()
angles += angles[:1]  # 完成圆圈

values += values[:1]  # 完成圆圈

# 创建图形和轴
fig, ax = plt.subplots(figsize=(10, 10), subplot_kw=dict(polar=True))

# 绘制圆环
ax.fill(angles, values, color='lightblue', alpha=0.5)
ax.plot(angles, values, color='blue', linewidth=2)  # 边界

# 添加标签
for i, (angle, value, label) in enumerate(zip(angles[:-1], values[:-1], labels)):
    x = (value + 0.05) * np.cos(angle)
    y = (value + 0.05) * np.sin(angle)
    ax.text(x, y, label, horizontalalignment='center', verticalalignment='center')

# 设置标签和刻度
ax.set_yticklabels([])  # 移除y轴刻度标签
ax.set_xticks(angles[:-1])  # 设置x轴刻度
ax.set_xticklabels(labels, rotation=45, ha='right')  # 设置x轴标签

# 显示图形
plt.show()

上面是一个雷达图:

在这里插入图片描述

用于成绩,各种表现,反应强项和若点。

import matplotlib.pyplot as plt
import numpy as np

# 数据
labels = ['房型 1', '房型 2', '房型 3', '房型 4', '房型 5', '房型 6', '房型 7', '房型 8', '房型 9', '房型 10', '房型 11']
sizes = [0.0606, 0.0909, 0.0758, 0.0909, 0.1061, 0.1212, 0.1364, 0.0909, 0.0303, 0.0455, 0.0606]

# 生成渐变色
cmap = plt.get_cmap('Blues')  # 可以选择其他渐变色图
colors = [cmap(i / len(sizes)) for i in range(len(sizes))]

# 创建圆环图
fig, ax = plt.subplots()
wedges, texts, autotexts = ax.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90, wedgeprops=dict(width=0.4), colors=colors)

# 设置中文显示
for text in texts:
    text.set_fontsize(10)
    text.set_color('black')

for autotext in autotexts:
    autotext.set_fontsize(8)
    autotext.set_color('black')

# 保持圆形
ax.axis('equal')

plt.title('房型分布圆环图')
plt.show()

上面是一个圆环图,通过圆环的面积,表示占比:
在这里插入图片描述

渐变色的颜色,看做清新顺畅。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2051908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JUC6-共享模型之不可变

目录 日期转换的问题 问题提出 思路&#xff1a;同步锁 思路&#xff1a;不可变 不可变设计 final的使用 保护性拷贝 享元模式 概述 体现 包装类 String串池 BigDecimal BigInteger DIY 原理&#xff1a;final 无状态 日期转换的问题 问题提出 下面的代码在运…

python井字棋游戏设计与实现

python实现井字棋游戏 游戏规则&#xff0c;有三个井字棋盘&#xff0c;看谁连成的直线棋盘多谁就获胜 棋盘的展现形式为 棋盘号ABC和位置数字1-9 输入A1 代表在A棋盘1号位数下棋 效果图如下 部分源码如下&#xff1a; 卫星工纵浩 白龙码程序设计&#xff0c;点 代码获取 …

Stability AI发布了单目视频转4D模型的新AI模型:Stable Video 4D

开放生成式人工智能初创公司Stability AI在3月发布了Stable Video 3D&#xff0c;是一款可以根据图像中的物体生成出可旋转的3D模型视频工具。Stability AI在7月24日发布了新一代的Stable Video 4D&#xff0c;增添了赋予3D模移动作的功能。 Stable Video 4D能在约40秒内生成8…

DBAPI如何用SQL将多表关联查询出树状结构数据(嵌套JSON格式)

场景描述 假设数据库中有3张表如下&#xff1a; 客户信息表 订单表 订单详情表 一个客户有多个订单&#xff0c;一个订单包含多个产品信息&#xff0c;客户-订单-产品就构成了3级的树状结构&#xff0c;如何查询出如下树状结构数据呢&#xff1f; [{"customer_age"…

矩阵--旋转图像

给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 &#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&a…

嵌入式Day33---Linux软件编程---网络编程

目录 一、TCP包头 1.1.源端口 1.2.目的端口 1.3.序号 1.4.确认号 1.5.数据偏移 1.6.保留 1.7.指令信号 1.SYN 2.ACK 3.FIN 4.RST 5.PSH 6.URG 1.8.窗口 1.9.校验和 1.10.紧急指针 二、TCP的过程 2.1三次握手 2.2.传输数据 ​编辑 2.3.四次挥手 ​编辑 …

SpringBoot依赖之Spring Data Redis 一 List 类型

概念 Spring Data Redis (AccessDriver) 依赖名称: Spring Data Redis (AccessDriver)功能描述: Advanced and thread-safe Java Redis client for synchronous, asynchronous, and reactive usage. Supports Cluster, Sentinel, Pipelining, Auto-Reconnect, Codecs and muc…

[Qt][QSS][下]详细讲解

目录 1.样式属性0.前言1.盒模型(Box Model) 2.常用控件样式属性1.按钮2.复选框3.单选框4.输入框5.列表6.菜单栏7.注意 1.样式属性 0.前言 QSS中的样式属性⾮常多&#xff0c;不需要都记住&#xff0c;核⼼原则是⽤到了就去查 ⼤部分的属性和CSS是⾮常相似的 QSS中有些属性&am…

Linux CentOS手动安装Node.js(图文教程)

本章教程主要介绍如何在centos7上安装指定版本的Node.js 一、下载nodejs 前往Node.js官网&#xff0c;根据自己需要安装的版本进行下载。 官网下载地址&#xff1a;https://nodejs.org/zh-cn/download/prebuilt-binaries 本文&#xff0c;以v14.21.3版本介绍整个安装过程。 二、…

<STC32G12K128入门第十步>USB HID键盘

前言 最近公司的一款低功耗的遥控器涉及到使用USB HID的功能,就是需要将BLE蓝牙读取的IC卡的数据在通过USB接口上传到电脑的记事本上面。 一、USB HID是啥? USB HID类是USB设备的一个标准设备类,包括的设备非常多。HID类设备定义它属于人机交互操作的设备,用于控制计算机…

IDEA 导入 RocketMQ 源码

目录 前言一、RocketMQ 架构二、环境准备三、下载源码四、编译源码4.1 导入源码4.2 目录结构4.3 运行程序1. 启动 Namesrv2. 启动 Broker3. 启动 Producer4. 启动 Consumer 五、监控平台的搭建5.1 下载 console 源码5.2 IDEA 启动 前言 最近项目中有个功能需要在本地调试下 Ro…

SAM2论文核心速览

官方博客&#xff1a; https://ai.meta.com/blog/segment-anything-2/ 官方论文&#xff1a;​​​​​​https://ai.meta.com/research/publications/sam-2-segment-anything-in-images-and-videos/ 一、研究背景 研究问题&#xff1a;这篇文章要解决的问题是如何在图像和视频…

公式编辑器 -vue-formula-editor

前言 公式编辑旨在帮助用户使用可视化的前提&#xff0c;能便捷的使用平台&#xff0c;例如低代码平台使用广泛 vue-formula-editor vue-formula-editor是一款开源的Vue公式计算组件&#xff0c;可以帮助开发者快速集成公式编辑 在线体验 demo & 源码 安装 npm i vue-form…

CentOS 上安装 Java 17

要在 CentOS 上安装 Java 17&#xff0c;您可以使用多种方法。这里我将向您展示如何通过下载 Oracle 提供的 Java 开发工具包 (JDK) 或使用其他开源 JDK 版本&#xff08;如 Adoptium 或 OpenJDK&#xff09;来完成安装。 方法一&#xff1a;使用 Oracle JDK 17 下载 JDK 17&a…

HTB-BoardLight靶机笔记

BoardLight靶机笔记 概述 HTB的靶机BoardLight 靶机地址&#xff1a;https://app.hackthebox.com/machines/BoardLight 一、nmap扫描 1&#xff09;端口扫描 -sT tcp全连接扫描 --min-rate 以最低速率10000扫描 -p- 扫描全端口 sudo nmap -sT --min-rate 10000 -p- -o p…

【论文写作】怎么写一篇学术论文

文章目录 &#xff08;一&#xff09;非匀速地写论文&#xff08;二&#xff09;弄清期刊的投稿要求以及使用论文模板&#xff08;三&#xff09;论文各个部分撰写的顺序&#xff08;四&#xff09;图表比你想象中的要重要许多&#xff08;五&#xff09;结果和讨论&#xff08…

Java | Leetcode Java题解之第349题两个数组的交集

题目&#xff1a; 题解&#xff1a; class Solution {public int[] intersection(int[] nums1, int[] nums2) {Arrays.sort(nums1);Arrays.sort(nums2);int length1 nums1.length, length2 nums2.length;int[] intersection new int[length1 length2];int index 0, index…

CPU占用异常分析

文章目录 问题现象二次排查参考资料 问题现象 执行文件解压&#xff0c;执行过程中被kill掉了&#xff0c;两次均如此。 [rootlocalhost demo_2]# gzip -d demo.sql.gz Killed网上查资料&#xff0c;可能是磁盘不足、系统资源不足&#xff1b; 磁盘查看没有问题&#xff0c;内…

Matlab2021b通过CNN、CNN-LSTM模型实现对声音信号的二分类与四分类

1、利用Matlab2021b训练CNN、CNN-LSTM模型&#xff0c;对采集的一维时序信号进行分类二分类与四分类 2. 声音信号每个样本数据长度3001个采样点&#xff0c;对其进行归一化处理 3、CNN时序信号多分类执行结果截图 3.1 二分类&#xff1a; CNN模型&#xff1a; 训练集损失值…

Linux装ifort环境

下载完成之后&#xff0c;需要解压文件 t tar zxvf IPSXE2020u4Linux.tgz 解压完成之后进入文件夹&#xff0c;我们使用GUI界面安装。 键入./install_GUI.sh 启动安装程序 收集用户信息&#xff0c;选择同意或者不同意都可以 这一步需要等待十几秒 核验不通过 这是缺少运行程…