Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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 matplotlib能否生成X==0作为有效数据点的日志条形图?_Python_Matplotlib_Plot_Bar Chart_Logarithm - Fatal编程技术网

Python matplotlib能否生成X==0作为有效数据点的日志条形图?

Python matplotlib能否生成X==0作为有效数据点的日志条形图?,python,matplotlib,plot,bar-chart,logarithm,Python,Matplotlib,Plot,Bar Chart,Logarithm,我想创建一个条形图,其中X轴将包括数十万个数据点 因此,我需要使用对数标度。唉,X==0是一个有效的数据点。 顺便说一句,Y轴应该使用线性刻度(其中Y是分布,00 else epsilon for k in\u graph]应该可以解决你的问题。顺便说一句:log是自然对数(以e为基数),你必须使用log10事实上你可能想使用:x=[k如果abs(k)>0,其他ε表示图中的k](如果你也有负数)谢谢你的建议。他们确实在一定程度上改善了情况,但输出图似乎仍然错误。请参阅我的作品中的EDIT 1。@

我想创建一个条形图,其中X轴将包括数十万个数据点

因此,我需要使用对数标度。唉,
X==0
是一个有效的数据点。

顺便说一句,Y轴应该使用线性刻度(其中Y是分布,
0symlog
而不是log,其中包括负数和一个接近零的小线性区域。例如

#!/usr/bin/env python

def test_plot3():
    import pylab as pl

    _graph = {0: 0.25, 1: 0.25, 2: 0.25, 3: 0.25}
    epsilon = 0.00000000001
    x = [ pl.log(k) if k > 0 else pl.log(epsilon) for k in _graph ]
    y = [ _graph[k] for k in _graph ]
    lx = pl.xlabel("in degree (logarithmic scale)")
    ly = pl.ylabel("normalized distribution (0 to 1)")
    tl = pl.title("graph in-degree normalized distribution")
    _width = 1.0 / (len(x) * 5.0)
    pl.bar(x, y, width=_width, log=True)
    pl.xscale('symlog')
    pl.yscale('linear')
    pl.show()

if __name__ == "__main__":
    test_plot3()
您可以使用
linthreshx
参数将线性区域的大小调整为
xscale

有关如何使用它的详细信息,请查看此文件。

您可以使用
symlog
而不是log,log包括负数和一个接近零的小线性区域。例如

#!/usr/bin/env python

def test_plot3():
    import pylab as pl

    _graph = {0: 0.25, 1: 0.25, 2: 0.25, 3: 0.25}
    epsilon = 0.00000000001
    x = [ pl.log(k) if k > 0 else pl.log(epsilon) for k in _graph ]
    y = [ _graph[k] for k in _graph ]
    lx = pl.xlabel("in degree (logarithmic scale)")
    ly = pl.ylabel("normalized distribution (0 to 1)")
    tl = pl.title("graph in-degree normalized distribution")
    _width = 1.0 / (len(x) * 5.0)
    pl.bar(x, y, width=_width, log=True)
    pl.xscale('symlog')
    pl.yscale('linear')
    pl.show()

if __name__ == "__main__":
    test_plot3()
您可以使用
linthreshx
参数将线性区域的大小调整为
xscale

有关如何使用它的详细信息,请查看此项。

您可以选择一个:将0置于对数缩放轴上,或获取正确的图形。您不能同时拥有这两个图形。您可以选择一个:将0置于对数缩放轴上,或获取正确的图形。您不能同时拥有这两个图形。谢谢您的建议。他们确实在一定程度上改善了这种情况,但输出图形似乎仍然错误。请参阅
EDIT 1
在我的作品@boardrider中,当你使用日志缩放轴(或symlog)时,你不必自己应用日志函数。只需传递值,matplotlib就会自动应用日志。因此基本上使用:
x=[k if k>0 else epsilon for k in\u graph]
应该可以解决你的问题。顺便说一句:
log
是自然对数(以e为基数),你必须使用
log10
事实上你可能想使用:
x=[k如果abs(k)>0,其他ε表示图中的k]
(如果你也有负数)谢谢你的建议。他们确实在一定程度上改善了情况,但输出图似乎仍然错误。请参阅我的作品中的
EDIT 1
。@boardrider当你使用日志缩放轴(或symlog)时,你不必自己应用日志函数。只需传递这些值,matplotlib就会自动应用日志。因此基本上使用:
x=[k if k>0 else epsilon for k in _graph]
应该可以解决您的问题。顺便说一句:
log
是自然对数(带基数e),您必须使用
log10
事实上您可能想使用:
x=[k if abs(k)>0 else epsilon for k in _graph]
(如果您还有负数)
#!/usr/bin/env python

def test_plot3():
    import pylab as pl

    _graph = {0: 0.25, 1: 0.25, 2: 0.25, 3: 0.25}
    epsilon = 0.00000000001
    x = [ pl.log(k) if k > 0 else pl.log(epsilon) for k in _graph ]
    y = [ _graph[k] for k in _graph ]
    lx = pl.xlabel("in degree (logarithmic scale)")
    ly = pl.ylabel("normalized distribution (0 to 1)")
    tl = pl.title("graph in-degree normalized distribution")
    _width = 1.0 / (len(x) * 5.0)
    pl.bar(x, y, width=_width, log=True)
    pl.xscale('symlog')
    pl.yscale('linear')
    pl.show()

if __name__ == "__main__":
    test_plot3()