Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python IP地址作为散点图中的x和y标签_Python_Pandas_Matplotlib - Fatal编程技术网

Python IP地址作为散点图中的x和y标签

Python IP地址作为散点图中的x和y标签,python,pandas,matplotlib,Python,Pandas,Matplotlib,我想更改熊猫散点图的x和y标签。X轴和Y轴是IP地址,我使用一个简单的ip2int函数将它们转换成整数。我希望在X轴和Y轴上有真正的“字符串”(即IP地址)标签。我试过了,但效果不好(见截图) 有没有办法解决这个问题?谢谢 **编辑-工作示例** import pandas as pd %pylab inline ipconn=[["192.168.1.1","192.168.1.2"],["192.168.1.1","192.168.1.2"],["192.168.1.1","192.1

我想更改熊猫散点图的x和y标签。X轴和Y轴是IP地址,我使用一个简单的ip2int函数将它们转换成整数。我希望在X轴和Y轴上有真正的“字符串”(即IP地址)标签。我试过了,但效果不好(见截图)

有没有办法解决这个问题?谢谢

**编辑-工作示例**

import pandas as pd

%pylab inline

ipconn=[["192.168.1.1","192.168.1.2"],["192.168.1.1","192.168.1.2"],["192.168.1.1","192.168.1.3"],["192.168.1.1","192.168.1.99"]]

df = pd.DataFrame(ipconn)

import socket

import struct 


def ip2int(addr):                                                               
    return struct.unpack("!I", socket.inet_aton(addr))[0]                       


def int2ip(addr):                                                               
    return socket.inet_ntoa(struct.pack("!I", addr)) 

df["x"]=df[0].map(ip2int)
df["y"]=df[1].map(ip2int)
ax = df.plot.scatter(x='x',y='y',s=50)
ax.set_xticklabels(df[0])
ax.set_yticklabels(df[1])
ax.set_xlabel("Source IP")
ax.set_ylabel("Destination IP")
在该示例中,您可以看到X、Y轴标签未与IP值对齐


我认为,最好的方法是能够设置一个函数来创建轴标签。

您需要将刻度设置为标签的值:

ax.set_xticklabels(df[0])
ax.set_yticklabels(df[1])
ax.set_xticks(df["x"])
ax.set_yticks(df["y"])
ax.set_xlabel("Source IP")
ax.set_ylabel("Destination IP")

通过在散点图中绘制源和目标IP地址,您试图从视觉上获得什么?你会得到一系列的垂直点。你可以添加一些真实的代码来重现你的问题吗?我指的是ordet中运行代码的一些输入示例。@cricket\u 007在这样的图中,您将能够看到某个特定主机是否正在扫描所有其他主机(垂直线)。您还将看到“密钥”服务器,即回答所有其他主机的主机(水平线)@Fabio我编辑了问题并添加了一个工作示例。谢谢你的帮助!谢谢它运行良好。我现在明白了,我的初始数据帧是错误的。我真正想要绘制的是我的数据集的pd.crosstab,它的计数是点的大小。很高兴听到这个消息。顺便说一句,如果它解决了你的问题,你可以给出一个答案。
ax.set_xticklabels(df[0])
ax.set_yticklabels(df[1])
ax.set_xticks(df["x"])
ax.set_yticks(df["y"])
ax.set_xlabel("Source IP")
ax.set_ylabel("Destination IP")