- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 matplotlib 为线条设置动画。我可以为圆和一些散点设置动画,但我正在尝试使用不断变化的角度添加线条。使用下面,我确定 X2
的方向, Y2
在每个时间点确定方向。然后我想绘制显示这个方向的线。他们基本上将圆圈分成 4 个相等的部分。我在下面分别插入了每一帧。我输入了一个指南针作为引用。
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import animation
fig, ax = plt.subplots(figsize = (8,8))
ax.set_xlim(-20,20)
ax.set_ylim(-20,20)
ax.grid(False)
df = pd.DataFrame({
'Time' : [1,1,1,1,2,2,2,2,3,3,3,3],
'id' : ['A','B','C','D','A','B','C','D','A','B','C','D'],
'X1' : [1,8,0,-5,1,1,-6,0,1,8,0,-5],
'Y1' : [-5,2,-5,2,5,-5,-2,2,-5,2,-5,2],
'X2' : [0,0,0,0,-1,-1,-1,-1,0,0,0,0],
'Y2' : [0,0,0,0,1,1,1,1,1,1,1,1],
'Rotation' : [0,0,0,0,-0.78,-0.78,-0.78,-0.78,1.57,1.57,1.57,1.57],
'Angle' : [0,0,0,0,-45,-45,-45,-45,90,90,90,90],
})
points_x = np.array(df.groupby(['Time'])['X1'].apply(list))
points_y = np.array(df.groupby(['Time'])['Y1'].apply(list))
# scatter points
points = ax.scatter(points_x[2], points_y[2], c = 'blue', marker = '*')
moving_x = np.array(df.groupby(['Time'])['X2'].apply(list))
moving_y = np.array(df.groupby(['Time'])['Y2'].apply(list))
# scatter moving
moving_point = ax.scatter(moving_x[2], moving_y[2], c = 'black', marker = 'x')
# Array of immediate congestion radius coordinates
radius = df.drop_duplicates(subset = ['Time','X2', 'Y2'])[['X2', 'Y2']].values
# Plot immediate congestion radius
circle = plt.Circle(radius[2], 10, color = 'black', fill = False)
# Add radius to plot
ax.add_patch(circle)
t = df['Angle'][0]
line1, = ax.plot([0, 0],[0,t], color = 'b', linewidth = 1)
def animate(i) :
circle.center = (radius[i,0], radius[i,1])
line1.set_data([i, i],[0,t])
points.set_offsets(np.c_[points_x[0+i], points_y[0+i]])
moving_point.set_offsets(np.c_[moving_x[0+i], moving_y[0+i]])
ani = animation.FuncAnimation(fig, animate, np.arange(0,2), blit = False)
如果我单独拆分帧,我希望它们显示以下内容:
最佳答案
为了处理您帖子中玩具数据集以外的数据集,我将创建动画的所有内容都放入函数 animate
中。 .由于我不熟悉您正在使用的数据集(例如我不知道 Rotation
做什么),下面的脚本是我能做的最好的。
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import animation
df = pd.DataFrame({
'Time' : [1,1,1,1,2,2,2,2,3,3,3,3],
'id' : ['A','B','C','D','A','B','C','D','A','B','C','D'],
'X1' : [1,8,0,-5,1,1,-6,0,1,8,0,-5],
'Y1' : [-5,2,-5,2,5,-5,-2,2,-5,2,-5,2],
'X2' : [0,0,0,0,-1,-1,-1,-1,0,0,0,0],
'Y2' : [0,0,0,0,1,1,1,1,1,1,1,1],
'Rotation' : [0,0,0,0,-0.78,-0.78,-0.78,-0.78,1.57,1.57,1.57,1.57],
'Angle' : [0,0,0,0,-45,-45,-45,-45,90,90,90,90],
})
# the scattered points in the compass
points_x = np.array(df.groupby(['Time'])['X1'].apply(list))
points_y = np.array(df.groupby(['Time'])['Y1'].apply(list))
# the center of the compass
moving_x = np.array(df.groupby(['Time'])['X2'].apply(list))
moving_y = np.array(df.groupby(['Time'])['Y2'].apply(list))
radius = df.drop_duplicates(subset = ['Time','X2', 'Y2'])[['X2', 'Y2']].values
angles = df['Angle'].unique()
rot_mat = lambda theta:np.array([
[np.cos(np.deg2rad(theta)),-np.sin(np.deg2rad(theta))],
[np.sin(np.deg2rad(theta)),np.cos(np.deg2rad(theta))]
])
fig, ax = plt.subplots(figsize = (8,8))
def animate(i) :
ax.clear()
ax.set_xlim(-20,20)
ax.set_ylim(-20,20)
points = ax.scatter(points_x[i]+radius[i][0], points_y[i]+radius[i][1], c = 'blue', marker = '*')
moving_point = ax.scatter(moving_x[i],moving_y[i], c = 'black', marker = 'x')
circle = plt.Circle(radius[i], 10, color = 'black', fill = False)
ax.add_patch(circle)
ends_one = np.array([[-7.07106781,7.07106781],[7.07106781,-7.07106781]])
ends_two = np.array([[-7.07106781,-7.07106781],[7.07106781,7.07106781]])
ends_one = ends_one @ rot_mat(angles[i]) + radius[i]
ends_two = ends_two @ rot_mat(angles[i]) + radius[i]
line1, = ax.plot([], [], ls='--', color='black',lw=1, zorder=10,animated=True)
line2, = ax.plot([], [], ls='--', color='black',lw=1, zorder=10,animated=True)
line1.set_data([ends_one[0][0],ends_one[1][0]],[ends_one[0][1],ends_one[1][1]])
line2.set_data([ends_two[0][0],ends_two[1][0]],[ends_two[0][1],ends_two[1][1]])
tags = ['N','E','S','W']
tag_pos = np.array([[0,8.5],[8.5,0],[0,-8.5],[-8.5,0]])
tag_pos = tag_pos @ rot_mat(angles[i])
for tag,pos in zip(tags,tag_pos):
ax.annotate(tag,xy=pos+radius[i], xycoords='data',
fontsize=10,horizontalalignment='right', verticalalignment='bottom')
ani = animation.FuncAnimation(fig, animate, np.arange(0,3), blit = False)
ani.save('test.gif', writer='pillow', fps=3)
如您所见,坐标可以迭代地传递给函数
animate
生成指南针的框架。运行这个脚本后,你会得到一个
gif
文件
test.gif
, 可以预览
ax.clear()
在函数的开头,例如
import matplotlib.pyplot as plt
from matplotlib import animation
rot_mat = lambda theta:np.array([
[np.cos(np.deg2rad(theta)),-np.sin(np.deg2rad(theta))],
[np.sin(np.deg2rad(theta)),np.cos(np.deg2rad(theta))]
])
fig, ax = plt.subplots(figsize = (8,8))
centers = np.linspace(1,36,36).reshape(18,2)*0.2
angles = np.linspace(45,90,18)
def animate(i) :
ax.clear()
ax.set_xlim(-20,20)
ax.set_ylim(-20,20)
circle = plt.Circle(centers[i], 10, color = 'black', fill = True)
circle.set_facecolor('violet')
ax.add_patch(circle)
tags = ['N','E','S','W']
tag_pos = np.array([[0,8.5],[8.5,0],[0,-8.5],[-8.5,0]])
tag_pos = tag_pos @ rot_mat(angles[i])
for tag,pos in zip(tags,tag_pos):
ax.annotate(tag,xy=pos+centers[i], xycoords='data',
fontsize=10,horizontalalignment='right', verticalalignment='bottom')
ani = animation.FuncAnimation(fig, animate, np.arange(0,18), blit = False)
ani.save('test.gif', writer='pillow', fps=18)
这将创建一个
gif
像这样
import matplotlib.pyplot as plt
from matplotlib import animation
rot_mat = lambda theta:np.array([
[np.cos(np.deg2rad(theta)),-np.sin(np.deg2rad(theta))],
[np.sin(np.deg2rad(theta)),np.cos(np.deg2rad(theta))]
])
centers = np.linspace(1,36,36).reshape(18,2)*0.2
angles = np.linspace(45,90,18)
fig, ax = plt.subplots(figsize = (8,8))
ax.set_xlim(-20,20)
ax.set_ylim(-20,20)
circle = plt.Circle(centers[0], 10, color = 'black', fill = True)
circle.set_facecolor('violet')
ax.add_patch(circle)
annotates = []
tags = ['N','E','S','W']
tag_pos = np.array([[0,8.5],[8.5,0],[0,-8.5],[-8.5,0]])
tag_pos = tag_pos @ rot_mat(angles[0])
for tag,pos in zip(tags,tag_pos):
ann = ax.annotate(tag,xy=pos+centers[0], xycoords='data',
fontsize=10,horizontalalignment='right', verticalalignment='bottom')
annotates.append(ann)
for i in range(18):
circle.center = centers[i]
# remove the previous text
for item in annotates: item.remove()
annotates = []
tag_pos = tag_pos @ rot_mat(angles[i])
for tag,pos in zip(tags,tag_pos):
ann = ax.annotate(tag,xy=pos+centers[i], xycoords='data',
fontsize=10,horizontalalignment='right', verticalalignment='bottom')
annotates.append(ann)
ani = animation.FuncAnimation(fig, animate, np.arange(0,18), blit = False)
ani.save('test.gif', writer='pillow', fps=18)
如您所见,使用这行代码
for item in annotates: item.remove()
,删除前一帧的文本。因此,通过运行此脚本,您还将获得
关于python - 动画圆圈内的线条 - matplotlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64223697/
我正在尝试创建一些文本标题,这些标题的一侧有一条线,该线基于文本的宽度是动态的。 例子: 我猜我需要在标题上做一些背景颜色(例如白色)来伪造它,然后使用 :before伪类,但到目前为止我还没有成功。
如何在 Qt 中使用 QVector 初始化多边形来创建一个开放多边形? QPolygonF 将始终关闭多边形并将最后一个点与第一个点连接起来。 谢谢你的帮助 [编辑] 在QGraphicsScene
如何获取数组中道路的几何形状(线条/绘图)? 可能吗? 谢谢! [抱歉我的英语不好] 最佳答案 目前 Google map 无法实现此操作。开源网络服务,如 OpenStreetMap能够返回数据库中
当我绘制具有透明纹理的平面(例如房屋的 window )时,我看到了不应该出现的线条或三角形。我该如何解决这个问题? (来源:troll.ws) 这是我用来绘制一个窗口的方法。我暂时启用混合以使窗口透
在 WPF 中,有没有一种方法可以修改从 Dash-Dot 序列绘制任何路径的方式?假设我想为我正在绘制的任何路径或绘图路径本身上的小三角形、波浪等绘制一条三重线。我已经尝试过画笔,但它不会遵循路径。
I have created an interactive map that when areas are selected then the related content should show/
我想在圆圈悬停时显示上下文菜单,以向用户显示一些选择,并在单击时执行一些操作,但我无法做到这一点。 如何在鼠标悬停事件上显示带有拉斐尔元素(例如圆圈、线条)的上下文菜单,并在选择特定菜单项时执行某些操
已解决。 我之前有一个问题,但它发布得非常糟糕,所以根据更好的规则,这里再次出现。 我想创建某种样式的图表,例如此图像: 。 它基于物理定律,Snell's Law 。到目前为止,我已经成功地使用基本
我正在绘制一些具有相同笔划的路径,但有一些明显的重叠(动态创建和更新树)。在重叠区域,笔划看起来与非重叠区域(- 参见 b)不同(更暗和更粗 - 参见 a)。同样的效果对于不同的笔触颜色也很明显。 代
我正在使用 python 和 opencv。我的目标是检测用树莓派相机拍摄的图像中的“X”形碎片。该项目是我们有预印的井字棋板,并且每次在板上放置新棋子(带有印章)时都必须对板进行成像。然后输出说明棋
设置图像样式有两种方法,一种是全局修改,一种只针对一幅图片有效。 全局修改 a<-c(1:10)#全局修改old_par<-par(no.readonly=TRUE)
Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython。
我创建了一个脚本来读取和绘制 .txt 文件及其内容(数字/值)。每个 .txt 文件位于不同的文件夹中。每个文件夹依次代表数据的一个主题。 这段代码工作正常。 Python 读取每个单独的 .txt
对于提交的最终文章,我被要求更新我的数据,以便它们符合以下规范: 轴线为 0.25 毫米 轴线周围,刻度线朝内 数据线为 0.5 毫米 字体为10pt 人物宽度应为 80 或 169 毫米 必须为 3
当尝试使用 D3DPT_LINELIST 在 3D 空间中绘制一条线时,Direct3D 给我一个关于无效顶点声明的错误,说它不能转换为 FVF .我使用的顶点声明和着色器/流设置与我的 D3DPT_
我如何使用 CSS 为 SVG“线”元素创建绘制动画。我想在滚动上画线,效果流畅。有人有什么想法吗?我试着搜索这个,但我找不到线元素的这种效果。这是我的 html 和 svg:
有什么方法可以用 CSS 来设置 SVG 行的样式吗?我试过添加。我想稍后用 JQuery 添加类 onclick。这将添加 class,然后更改描边颜色。 .black { fill: blac
我创建了一个受“站点地图”启发的菜单,它使用 svgs 连接菜单中的每个元素。目前 svg 是静态的。但是我相信有可能使这些吸引进来? 我有一个更复杂的问题,我只希望在容器 ul 可见时绘制线条。 当
这个问题在这里已经有了答案: How to draw a path smoothly from start point to end point in D3.js (1 个回答) 关闭 6 年前。
我在代码中的 HTML5 Canvas 元素上绘制了许多 1px 线。绘图代码大致如下所示,本例中的 transform 变量使用 d3-zoom 设置。 instructions.f32 是一个 F
我是一名优秀的程序员,十分优秀!