python - 极坐标,日期时间
问题描述
我正在尝试在极坐标系中绘制一些与时间相关的数据。问题是我得到了一个我不知道从哪里开始的输出:时间、定位器……没有“正确”绘制。
我每 2 小时需要一些主要滴答声,每小时需要一些次要滴答声,以及与一天转换相对应的天标签。在正常坐标中似乎没问题,但是当切换到极坐标时,它似乎更复杂,这非常令人困惑。我想念 smt 但不知道是什么。
我试过了
p_locator = mpolar.ThetaLocator(mdates.AutoDateLocator(minticks=24, maxticks=24))
p_formatter = mpolar.ThetaFormatter()
或与
p_locator = mdates.AutoDateLocator()
p_formatter = mdates.DateFormatter("%H:%M")
但没有成功。我想我错过了对象matplotlib
内部的工作方式datetime
。不仅仅是蜱,定位器和公司。是“错误的”,但数据甚至不适合整个圆圈(->我应该应用比例转换吗?)
我真的很感激一些帮助来理解它背后的机制。
更新轴
ax.set_xticks(time_ticks)
ax.xaxis.set_major_formatter(p_formatter)
ax.xaxis.set_major_locator(p_locator)
这是一个代码示例
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.ticker as ticker
import matplotlib.projections.polar as mpolar
import matplotlib.ticker as mticker
import datetime
import random
N_MAJOR_TICKS = 12 # amount of major ticks
IS_MULTI_DAYS = True
def random_daily_hours(n_times, base_date=datetime.datetime.today()): # ordered list of day-hours
secs = sorted([random.randint(0, 24*60*60 - 1) for _ in range(n_times)])
return [base_date + datetime.timedelta(seconds=s) for s in secs]
def uniform_daily_hours(n, base_date=datetime.datetime.today()): # return floats! matplolib format!!!
return [base_date + datetime.timedelta(days=1)*i/n for i in range(n)]
# time ticks
time_ticks = uniform_daily_hours(N_MAJOR_TICKS)
# random values
random.seed(10) # fixing random state for reproducibility
x = random_daily_hours(15)
y = [random.random() for _ in range(len(x))]
# multi days - append a consecutive day
if IS_MULTI_DAYS:
day = datetime.timedelta(days=1)
x += random_daily_hours(15, base_date=datetime.datetime.today() + 1 * day)
y = [random.random() for _ in range(len(x))]
ax = plt.subplot(projection='polar')
# fix scale & orientation
ax.set_rticks([0.5, 1, 1.5, 2]) # set values radial ticks
ax.set_rlabel_position(120) # set location radial scale
ax.set_theta_zero_location('N') # set polar reference direction
ax.set_theta_direction(-1) # set default orientation - clockwise
# attempt 1
ax.set_xticks(np.linspace(0, 2 * np.pi, N_MAJOR_TICKS, endpoint=False))
ax.set_xticklabels(time_ticks)
ax.plot(x, y, '-')
ax.grid(True)
plt.show()
解决方案
推荐阅读
- excel - Excel 公式 - 列表中重复次数最多的前 10 个值
- python - 如何替换 pd datafframe 中字符串的第一个实例?
- xml - xml 替换组 - 子组中包含哪些元素?
- python - PyPi 站点中缺少 sys、subprocess、timeit 包
- ios - 如何从 PencilKit 中的 PKInkingTool 设置恒定的笔划宽度
- python - 如何获得正确的值?
- joi - JOI 验证以验证给定对象数组中的对象
- python - 在 pandas 数据框中达到一定数量的行后,日期格式变回以前的格式
- coldfusion - 将嵌套结构数组转换为查询
- sql - 如何处理其中一个可以为空的相关复合外键?