可以在轴上绘制十进制值,但在matplotlib中让标签显示十六进制值吗?

gcmastyq  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(118)

我有一些数据在一个csv文件中,有两列:微处理器中的时钟周期(以十进制显示)和32位寄存器0至4000(也以十进制显示)。
一切工作完美,但我希望能够显示十六进制的x轴值,而不是十进制,因为这是更有意义的分析。这是可能的吗?目前我必须转换为十六进制,每次我需要检查一些数据序列。我还希望能够悬停在一个数据点,并有十六进制值显示,而不是十进制值。
我试着把这些值绘制成十六进制字符串,但是它们没有按顺序绘制,所以看起来完全不同,不放大就不可能分析。
我的代码和图表如下所示:

import pandas as pd
from matplotlib import pyplot as plt

columns = ["a", "b"]

df = pd.read_csv("my_file_location.csv", usecols=columns, nrows=5000)

print("Contents in csv file:", df)

plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

plt.title('Reg / Clock Cycles)')
plt.xlabel('Clock Cycles', fontsize=10)
plt.ylabel('Reg Value (Decimal)', fontsize=10)
plt.scatter(df.a, df.b) 
plt.show()

4xrmg8kj

4xrmg8kj1#

答案是肯定的,你可以这么做,尽管你需要安装一个名为mplcursors的库。

import numpy as np
import matplotlib.pyplot as plt
import mplcursors

x = np.random.randint(low=1, high=5000, size=100)
y = np.random.randint(low=10, high=4000, size=100)

fig, ax = plt.subplots()
ax.scatter(x, y)

ax.xaxis.set_major_formatter(lambda x, pos: hex(int(x)) + ", " + str(int(x)))

# Or try 
# ax.xaxis.set_major_formatter(lambda x, pos: hex(int(x)))

mplcursors.cursor() 

plt.show()

在Tick格式化程序的帮助下,您可以将刻度格式化为您想要的任何值,mplcursors只是添加了一个注解。

相关问题