Skip to content

Latest commit

 

History

History
358 lines (298 loc) · 8.9 KB

File metadata and controls

358 lines (298 loc) · 8.9 KB
Error in user YAML: (<unknown>): found a tab character that violate indentation while scanning a plain scalar at line 3 column 3
---
- oeasy Python 0721
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
- 本教程同步发布在: 
	- 个人网站: `https://oeasy.org` 
	- 蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
	- GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
	- Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

基础的csv文件

2024,2
2025,3
2026,3.5

读取csv

filename = r"/home/shiyanlou/data.csv"
with open(filename) as f:
    lines = f.readlines()
    for line in lines:
        line = line.replace("\n","")
        year, num = line.split(",")
        print(year,num,sep=":")

更有结构化

filename = r"/home/shiyanlou/data.csv"
data = dict()
with open(filename) as f:
    for index,line in enumerate(f.readlines()):
        line = line.replace("\n","")
        year, num = line.split(",")
        data[index] ={
            "label" : year,
            "num" : num
        }
print(data)

图片描述

生成柱形图

import bpy

filename = r"/home/shiyanlou/data.csv"
data = dict()
with open(filename) as f:
    for index,line in enumerate(f.readlines()):
        line = line.replace("\n","")
        year, num = line.split(",")
        data[index] ={
            "label" : year,
            "num" : num
        }

### clean the scene
for obj in bpy.data.objects:
    bpy.data.objects.remove(obj)

### Visualize data
for index in data:
    bpy.ops.mesh.primitive_cube_add(size=1)
    bpy.context.object.location = (0, index * 2, 0)
    value = float(data[index]["num"])
    bpy.context.object.scale = (1, 1, value)
  • 执行结果

图片描述

  • 需要放在xy平面以上

生成柱形图

import bpy

filename = r"/home/shiyanlou/data.csv"
data = dict()
with open(filename) as f:
    for index,line in enumerate(f.readlines()):
        line = line.replace("\n","")
        year, num = line.split(",")
        data[index] ={
            "label" : year,
            "num" : num
        }

### clean the scene
for obj in bpy.data.objects:
    bpy.data.objects.remove(obj)

### Visualize data
for index in data:
    bpy.ops.mesh.primitive_cube_add(size=1)
    bpy.context.object.location = (0, index * 2, height/2)
    value = float(data[index]["num"])
    bpy.context.object.scale = (1, 1, value)
  • 执行结果

图片描述

添加标签


import bpy

filename = r"/home/shiyanlou/data.csv"
data = dict()
with open(filename) as f:
    for index,line in enumerate(f.readlines()):
        line = line.replace("\n","")
        year, num = line.split(",")
        data[index] ={
            "label" : year,
            "num" : num
        }
 
### clean the scene
for obj in bpy.data.objects:
    bpy.data.objects.remove(obj)

### Visualize data
for index in data:
    ### create the bar
    height = float(data[index]["num"])
    bpy.ops.mesh.primitive_cube_add(size=1)
    bpy.context.object.location = (0, index * 2, height/2)
    bpy.context.object.scale = (1, 1, height)
    ### lable the bar
    lable = data[index]["label"]
    bpy.ops.object.text_add(enter_editmode=True)
    bpy.context.object.location = (0.6, index *2, 0)
    bpy.ops.font.delete(type="PREVIOUS_WORD") 
    bpy.ops.font.text_insert(text=lable)
    bpy.ops.object.editmode_toggle()
  • 标签出现

图片描述

  • 尝试给标签添加一点厚度

添加厚度

import bpy

filename = r"/home/shiyanlou/data.csv"
data = dict()
with open(filename) as f:
    for index,line in enumerate(f.readlines()):
        line = line.replace("\n","")
        year, num = line.split(",")
        data[index] ={
            "label" : year,
            "num" : num
        }
 
### clean the scene
for obj in bpy.data.objects:
    bpy.data.objects.remove(obj)

### Visualize data
for index in data:
    ### create the bar
    height = float(data[index]["num"])
    bpy.ops.mesh.primitive_cube_add(size=1)
    bpy.context.object.location = (0, index * 2, height/2)
    bpy.context.object.scale = (1, 1, height)
    ### lable the bar
    lable = data[index]["label"]
    bpy.ops.object.text_add(enter_editmode=True)
    bpy.context.object.location = (0.6, index *2, 0)
    bpy.ops.font.delete(type="PREVIOUS_WORD") 
    bpy.ops.font.text_insert(text=lable)
    bpy.ops.object.editmode_toggle()
    bpy.context.object.data.bevel_depth = 0.1
  • 标签变厚了

图片描述

侧面标签

import bpy

filename = r"/home/shiyanlou/data.csv"
data = dict()
with open(filename) as f:
    for index,line in enumerate(f.readlines()):
        line = line.replace("\n","")
        year, num = line.split(",")
        data[index] ={
            "label" : year,
            "num" : num
        }

### clean the scene
for obj in bpy.data.objects:
    bpy.data.objects.remove(obj)

### Visualize data
for index in data:
    ### create the bar
    height = float(data[index]["num"])
    bpy.ops.mesh.primitive_cube_add(size=1)
    bpy.context.object.location = (0, index * 2, height/2)
    bpy.context.object.scale = (1, 1, height)
    ### lable the bar
    lable = data[index]["label"]
    bpy.ops.object.text_add(enter_editmode=True)
    bpy.context.object.location = (0.6, index *2, 0)
    bpy.ops.font.delete(type="PREVIOUS_WORD")
    bpy.ops.font.text_insert(text=lable)
    bpy.ops.object.editmode_toggle()
    bpy.context.object.data.bevel_depth = 0.1

###visualize the data
# Label z axis
amount_of_ticks = 5
for i in range (amount_of_ticks):
    # Put a cube
    bpy.ops.mesh.primitive_cube_add(size=1, location=(0, -1, i))
    bpy.context.object.scale = (1, 1, 0.1)
  • 侧面出现刻度

图片描述

侧面刻度参数化

import bpy

filename = r"/home/shiyanlou/data.csv"
data = dict()
with open(filename) as f:
    for index,line in enumerate(f.readlines()):
        line = line.replace("\n","")
        year, num = line.split(",")
        data[index] ={
            "label" : year,
            "num" : num
        }

### clean the scene
for obj in bpy.data.objects:
    bpy.data.objects.remove(obj)

### Visualize data
for index in data:
    ### create the bar
    height = float(data[index]["num"])
    bpy.ops.mesh.primitive_cube_add(size=1)
    bpy.context.object.location = (0, index * 2, height/2)
    bpy.context.object.scale = (1, 1, height)
    ### lable the bar
    lable = data[index]["label"]
    bpy.ops.object.text_add(enter_editmode=True)
    bpy.context.object.location = (0.6, index *2, 0)
    bpy.ops.font.delete(type="PREVIOUS_WORD")
    bpy.ops.font.text_insert(text=lable)
    bpy.ops.object.editmode_toggle()
    bpy.context.object.data.bevel_depth = 0.1

###visualize the data
# Label z axis
amount_of_ticks = 5
thickness_of_ticks = 0.1
offset_of_ticks = 1
for i in range (amount_of_ticks):
    # Put a cube
    bpy.ops.mesh.primitive_cube_add(size=1, location=(0, -offset_of_ticks, i))
    bpy.context.object.scale = (1, 1, thickness_of_ticks)

添加标签

import bpy

filename = r"/home/shiyanlou/data.csv"
data = dict()
with open(filename) as f:
    for index,line in enumerate(f.readlines()):
        line = line.replace("\n","")
        year, num = line.split(",")
        data[index] ={
            "label" : year,
            "num" : num
        }

### clean the scene
for obj in bpy.data.objects:
    bpy.data.objects.remove(obj)

### Visualize data
for index in data:
    ### create the bar
    height = float(data[index]["num"])
    bpy.ops.mesh.primitive_cube_add(size=1)
    bpy.context.object.location = (0, index * 2, height/2)
    bpy.context.object.scale = (1, 1, height)
    ### lable the bar
    lable = data[index]["label"]
    bpy.ops.object.text_add(enter_editmode=True)
    bpy.context.object.location = (0.6, index *2, 0)
    bpy.ops.font.delete(type="PREVIOUS_WORD")
    bpy.ops.font.text_insert(text=lable)
    bpy.ops.object.editmode_toggle()
    bpy.context.object.data.bevel_depth = 0.1

###visualize the data
# Label z axis
amount_of_ticks = 5
thickness_of_ticks = 0.1
offset_of_ticks = 1
for i in range (amount_of_ticks):
    # Put a cube
    bpy.ops.mesh.primitive_cube_add(size=1, location=(0, -offset_of_ticks, i))
    bpy.context.object.scale = (1, 1, thickness_of_ticks)
    # Put a number
    number_pos_z = i + thickness_of_ticks/2
    value_as_str = str(i)
    bpy.ops.object.text_add(enter_editmode=True)
    bpy.context.object.location = (0, -2, number_pos_z)
    bpy.context.object.rotation_euler = (1.57, 0, 1.57)
    bpy.ops.font.delete(type='PREVIOUS_WORD')
    bpy.ops.font.text_insert(text=value_as_str)
    bpy.ops.object.editmode_toggle()
    bpy.context.object.data.bevel_depth = 0.1
  • z轴坐标数值出现

图片描述

  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。