我正在嘗試從網路設備創建一些自動生成的報告。
正如網路設備所期望的那樣,資料以位元組為單位從傳感器發送。但是,我遇到的“問題”是,我想修改 y 軸以將結果解釋為嚴格地解釋為兆位元組 (mb) 甚至更好的 kb/mb/gb,具體取決于平均流大小的集合。
作為參考,如果我通過 gui(石墨)查看此特定查詢,則會生成 Y 軸為 Mb 的渲染

雖然 matlibplot 將浮點值解釋為浮點數,因此默認為科學記數法

# a small fraction sample data
# Typically handing ~8400 rows per iteration
[
[
973920.8333330154,
'2022-03-01 00:00:00'
],
[
993574,
'2022-03-02 00:00:00'
],
[
964486.5,
'2022-03-03 00:00:00'
],
[
972345.4166669846,
'2022-03-04 00:00:00'
],
[
972770.9166665077,
'2022-03-05 00:00:00'
],
[
961019.75,
'2022-03-06 00:00:00'
],
[
957663.9166665077,
'2022-03-07 00:00:00'
],
[
957588.5,
'2022-03-08 00:00:00'
],
[
959108,
'2022-03-09 00:00:00'
],
[
959551.8333334923,
'2022-03-10 00:00:00'
]
]
這是我與繪圖的第一次互動,所以可能是一個我還沒有找到的解決這個問題的切割器功能。
歡迎所有想法。
更新:
我還沒有弄清楚 MR.T 建議的自定義主要格式化程式
我有一個在繪圖之前將資料幀值更改為 MB 的原型,但需要測驗平均值是否適合我的目的
import pandas as pd
import numpy as np
def sizeof_fmt(num):
for x in ['bytes', 'KB', 'MB', 'GB', 'TB']:
if num < 1024.0:
return "%3.1f_%s" % (num, x)
num /= 1024.0
df = pd.DataFrame(
[[2097152, '2020-01-02 00:00:00'],
[2831155.2, '2020-01-02 00:00:00'],
[1077936128, '2020-01-02 00:00:00'],
[np.NaN, '2020-01-02 00:00:00'],
[np.NaN, '2020-01-02 00:00:00']])
df.plot()
operator = sizeof_fmt(df[0].mean()).split('_')[1]
print(sizeof_fmt(df[0].mean()))
print(operator)
if (operator == 'MB'):
df[[0]] = df[[0]].div(1024*1024)
print(df)
uj5u.com熱心網友回復:
您的功能很完美,但您從未將其應用于格式化程式。你可以這樣做:
from matplotlib import pyplot as plt
import matplotlib.ticker as tkr
import numpy as np
def sizeof_fmt(x, pos):
if x<0:
return ""
for x_unit in ['bytes', 'kB', 'MB', 'GB', 'TB']:
if x < 1024.0:
return "%3.1f %s" % (x, x_unit)
x /= 1024.0
#sample data
import pandas as pd
df = pd.DataFrame(
[[12097152, '2020-01-02 00:00:00'],
[31155.2, '2020-01-02 10:00:00'],
[np.NaN, '2020-01-02 12:00:00'],
[1234, '2020-01-03 04:00:00'],
[1877936128, '2020-01-03 05:10:00']])
df[1] = pd.to_datetime(df[1])
ax = df.plot(x=1, y=0)
ax.yaxis.set_major_formatter(tkr.FuncFormatter(sizeof_fmt))
plt.show()

Formatter 的優點是放大時更新的刻度仍然是正確的格式。

您還可以撰寫自己的Locator 方法以確保刻度始終為 1024 的倍數,但我從未對此進行過研究。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/449133.html
標籤:Python 数据框 matplotlib
上一篇:Matplotlib分段繪圖
下一篇:如何從“example.com/products/123/title-of-this-product”之類的干凈網址獲取$_GET['id']?
