2015-12-21 73 views
0

我想更改熊猫散点图的x和y标签。 X轴和Y轴是IP地址,我使用简单的ip2int函数将它们转换为整数。我想在X和Y轴上有真正的“字符串”(即IP地址)标签。我想这一点,但它不能很好地工作(见截图)作为熊猫散点图中x和y标签的IP地址

ipcon['a']=ipcon['srcip'].map(ip2int) 
ipcon['b']=ipcon['dstip'].map(ip2int) 
ax = ipcon.plot.scatter(x='a',y='b',s=50) 
ax.set_xticklabels(ipcon['srcip']) 
ax.set_yticklabels(ipcon['dstip']) 
ax.set_xlabel("Source IP") 
ax.set_ylabel("Destination IP") 

screenshot of the resulting scatter plot

反正是有解决这个问题?由于

**编辑 - 工作示例**

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对准值

的最佳方式,我想可以设置一个函数来创建轴标签。

+0

什么是你想在散点图绘图源和目的IP地址在视觉上得到什么?你最终会得到一系列垂直点。 –

+0

可否请您添加一些真实的代码以便能够重现您的问题?我的意思是在ordet中输入一些样本来运行你的代码。 –

+0

@ cricket_007在这样的图表中,您将能够看到特定主机是否正在扫描所有其他(垂直线)。您还将看到“关键”服务器,即回答所有其他主机(水平线)的主机。 – hoZr

回答

0

您需要设置蜱值您的标签:

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") 
+0

谢谢。它运作良好。我现在明白我的初始数据框是错误的。我真正想要绘制的是我的数据集的pd.crosstab,其中count为点的大小。 – hoZr

+0

好听。顺便说一句,你可以[接受](http://stackoverflow.com/help/accepted-answer)一个答案,如果它解决了你的问题。 –