吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 683|回复: 12
上一主题 下一主题
收起左侧

[Python 原创] Python散点图绘制雪人

  [复制链接]
跳转到指定楼层
楼主
Foreverday 发表于 2025-12-11 15:33 回帖奖励
大家好!和大家分享一个有趣的小项目—使用散点图(scatter plot)绘制一个完整的雪人。
代码通过生成数千个随机散点,将它们组合成一个包含完整装饰的雪人图像,包括:
1、三层白色雪球身体
2、黑色礼帽和红色围巾
3、胡萝卜鼻子和纽扣
4、树枝手臂和雪花背景

[Python] 纯文本查看 复制代码
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np

def create_circle_scatter(center_x, center_y, radius, num_points=500):
    """生成圆形散点的坐标"""
    angles = np.random.uniform(0, 2 * np.pi, num_points)
    radii = np.random.uniform(0, radius, num_points)
    x = center_x + radii * np.cos(angles)
    y = center_y + radii * np.sin(angles)
    return x, y

# 创建画布
fig, ax = plt.subplots(figsize=(8, 10), dpi=150)  # 设置dpi为150,提高清晰度
fig.patch.set_facecolor('skyblue')
ax.set_facecolor('skyblue')

# 设置坐标轴范围
ax.set_xlim(-5, 5)
ax.set_ylim(-2, 12)
ax.set_aspect('equal')
ax.axis('off')  # 隐藏坐标轴

# 1. 雪人底部(最大的圆)
x_bottom, y_bottom = create_circle_scatter(0, 0, 2, 800)
ax.scatter(x_bottom, y_bottom, c='white', s=20, alpha=0.9, edgecolors='none')

# 2. 雪人中部
x_middle, y_middle = create_circle_scatter(0, 2.8, 1.5, 600)
ax.scatter(x_middle, y_middle, c='white', s=20, alpha=0.9, edgecolors='none')

# 3. 雪人头部
x_head, y_head = create_circle_scatter(0, 4.8, 1, 400)
ax.scatter(x_head, y_head, c='white', s=20, alpha=0.9, edgecolors='none')

# 4. 眼睛
ax.scatter([-0.3, 0.3], [5.1, 5.1], c='black', s=80, marker='o')

# 5. 胡萝卜鼻子
nose_x = np.array([0, 0.1, -0.1])
nose_y = np.array([4.9, 4.7, 4.7])
ax.fill(nose_x, nose_y, color='orange', alpha=0.8)
ax.plot([0, 0], [4.9, 4.7], c='darkorange', linewidth=3)

# 6. 帽子
# 帽檐
hat_brim_x, hat_brim_y = create_circle_scatter(0, 5.9, 0.4, 200)
ax.scatter(hat_brim_x, hat_brim_y, c='black', s=20)
# 帽身
hat_x = np.array([-0.3, 0.3, 0.25, -0.25])
hat_y = np.array([5.9, 5.9, 6.8, 6.8])
ax.fill(hat_x, hat_y, color='black', alpha=0.9)

# 7. 围巾
scarf_x = np.random.uniform(-0.8, 0.8, 300)
scarf_y = np.random.uniform(4.3, 4.6, 300)
ax.scatter(scarf_x, scarf_y, c='red', s=25)
# 围巾飘带
scarf_end_x = np.random.uniform(0.5, 0.9, 100)
scarf_end_y = np.random.uniform(3.8, 4.3, 100)
ax.scatter(scarf_end_x, scarf_end_y, c='red', s=25)

# 8. 纽扣
button_y_positions = [1.5, 2.1, 2.7]
for y_pos in button_y_positions:
    ax.scatter(0, y_pos, c='black', s=60, marker='o')

# 9. 手臂(树枝)
# 左臂
left_arm_x = np.random.normal(-1.5, 0.05, 50)
left_arm_y = np.random.normal(3.5, 0.1, 50)
ax.scatter(left_arm_x, left_arm_y, c='brown', s=15)
ax.plot([-2.8, -0.8], [3.8, 3.2], c='brown', linewidth=4)
# 右臂
right_arm_x = np.random.normal(1.5, 0.05, 50)
right_arm_y = np.random.normal(3.5, 0.1, 50)
ax.scatter(right_arm_x, right_arm_y, c='brown', s=15)
ax.plot([2.8, 0.8], [3.8, 3.2], c='brown', linewidth=4)

# 10. 雪花装饰
snow_x = np.random.uniform(-4.5, 4.5, 100)
snow_y = np.random.uniform(-1, 11, 100)
ax.scatter(snow_x, snow_y, c='white', s=10, alpha=0.6, marker='*')

# 添加标题
plt.title('snowman', fontsize=20, color='navy', y=0.95)

plt.tight_layout()

# 保存为PNG文件
plt.savefig('snowman_scatter.png', dpi=300, bbox_inches='tight', facecolor='skyblue')

# 关闭图形以释放内存
plt.close()

print("\n图已成功保存为 'snowman_scatter.png'\n")




冬至快到了,祝福大家!

snowman_scatter.png (512.01 KB, 下载次数: 1)

snowman_scatter.png

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
wenmingziyou + 1 + 1 热心回复!
bsl8848793 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

受到警告 推荐
123WPF 发表于 2025-12-11 15:41
学习了
老实说,从专业角度来看,楼主的帖子根本不值一顶;但既然已经上当进来,把帖子点开,不顶,则意味着少积1分,失去早日升级的机会。 顶,还是不顶?我的思想进行着激烈的斗争。 顶,可以为自己增加可耻但宝贵的1分,但崇高的信仰与无暇的品格毁于一旦;不顶,高尚的风范得以保全,若干年后,还可以对孙子说: 很久以前,爷爷曾今有过一个机会……, 但毫无疑问永远成为论坛的落后分子。 我不断地踟蹰着,彷徨着,犹豫着。。。眼看从沙发降到了板凳,又从板凳降到了地板,再不顶,估计首页都不能保住了。。。 我一狠心,一咬牙,决定还是顶一个!

免费评分

参与人数 4吾爱币 -6 收起 理由
inmuhaker + 1 请勿灌水,提高帖子质量是每位会员应尽的义务!
zhengzhenhui945 -1 请勿灌水,提高帖子质量是每位会员应尽的义务!
苏紫方璇 -5 请勿灌水,提高帖子质量是每位会员应尽的义务!
PythonPan -1 请勿灌水,提高帖子质量是每位会员应尽的义务!

查看全部评分

3#
Qq290275 发表于 2025-12-11 16:05
刚刚开始学习python,刚到画线阶段,复制学习一下楼主的作品,谢谢分享。
4#
snyang 发表于 2025-12-11 16:21

刚开始接触python,为啥我复制后,第一行就报错
5#
bsl8848793 发表于 2025-12-11 16:24
试一试看看
6#
laotzudao0 发表于 2025-12-11 16:27
这嘴看起来抽象啊
7#
xieyang 发表于 2025-12-11 16:33
snyang 发表于 2025-12-11 16:21
刚开始接触python,为啥我复制后,第一行就报错

没有这个库,装上就行了
8#
snyang 发表于 2025-12-11 16:39
xieyang 发表于 2025-12-11 16:33
没有这个库,装上就行了

ok谢谢提醒
9#
ytdzjun 发表于 2025-12-11 16:52
挺有意思的一段代码
10#
snyang 发表于 2025-12-11 17:14

哈哈,下载了2个库,总算了搞出来了,找这个图还花了些时间
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-12-12 06:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表