Ruby 或 Python 中的财务图表/图形
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1089307/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Financial Charts / Graphs in Ruby or Python
提问by Eric the Red
What are my best options for creating a financial open-high-low-close (OHLC) chart in a high level language like Ruby or Python? While there seem to be a lot of options for graphing, I haven't seen any gems or eggs with this kind of chart.
使用 Ruby 或 Python 等高级语言创建金融开盘-高-低-收盘 (OHLC) 图表的最佳选择是什么?虽然似乎有很多绘图选项,但我没有看到任何带有这种图表的宝石或鸡蛋。
http://en.wikipedia.org/wiki/Open-high-low-close_chart(but I don't need the moving average or Bollinger bands)
http://en.wikipedia.org/wiki/Open-high-low-close_chart(但我不需要移动平均线或布林带)
JFreeChart can do this in Java, but I'd like to make my codebase as small and simple as possible.
JFreeChart 可以在 Java 中做到这一点,但我想让我的代码库尽可能小和简单。
Thanks!
谢谢!
回答by Aaron Maenpaa
You can use matplotliband the the optional bottom
parameter of matplotlib.pyplot.bar. You can then use line plot
to indicate the opening and closing prices:
您可以使用matplotlib和可选bottom
的参数matplotlib.pyplot.bar。然后您可以使用 lineplot
来指示开盘价和收盘价:
For example:
例如:
#!/usr/bin/env python
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import lines
import random
deltas = [4, 6, 13, 18, 15, 14, 10, 13, 9, 6, 15, 9, 6, 1, 1, 2, 4, 4, 4, 4, 10, 11, 16, 17, 12, 10, 12, 15, 17, 16, 11, 10, 9, 9, 7, 10, 7, 16, 8, 12, 10, 14, 10, 15, 15, 16, 12, 8, 15, 16]
bases = [46, 49, 45, 45, 44, 49, 51, 52, 56, 58, 53, 57, 62, 63, 68, 66, 65, 66, 63, 63, 62, 61, 61, 57, 61, 64, 63, 58, 56, 56, 56, 60, 59, 54, 57, 54, 54, 50, 53, 51, 48, 43, 42, 38, 37, 39, 44, 49, 47, 43]
def rand_pt(bases, deltas):
return [random.randint(base, base + delta) for base, delta in zip(bases, deltas)]
# randomly assign opening and closing prices
openings = rand_pt(bases, deltas)
closings = rand_pt(bases, deltas)
# First we draw the bars which show the high and low prices
# bottom holds the low price while deltas holds the difference
# between high and low.
width = 0
ax = plt.axes()
rects1 = ax.bar(np.arange(50), deltas, width, color='r', bottom=bases)
# Now draw the ticks indicating the opening and closing price
for opening, closing, bar in zip(openings, closings, rects1):
x, w = bar.get_x(), 0.2
args = {
}
ax.plot((x - w, x), (opening, opening), **args)
ax.plot((x, x + w), (closing, closing), **args)
plt.show()
creates a plot like this:
创建一个这样的情节:
Obviously, you'd want to package this up in a function that drew the plot using (open, close, min, max)
tuples (and you probably wouldn't want to randomly assign your opening and closing prices).
显然,您希望将其打包到一个使用(open, close, min, max)
元组绘制绘图的函数中(并且您可能不想随机分配开盘价和收盘价)。
回答by unmounted
You can use Pylab (matplotlib.finance
) with Python. Here are some examples: http://matplotlib.sourceforge.net/examples/pylab_examples/plotfile_demo.html. There is some good material specifically on this problem in Beginning Python Visualization.
您可以将 Pylab ( matplotlib.finance
) 与 Python 结合使用。以下是一些示例:http: //matplotlib.sourceforge.net/examples/pylab_examples/plotfile_demo.html。在Beginning Python Visualization 中有一些专门针对此问题的好材料。
Update: I think you can use matplotlib.finance.candlestickfor the Japanese candlestick effect.
更新:我认为您可以将matplotlib.finance.candlestick用于日本烛台效果。
回答by David Locke
回答by karlacio
Some examples about financial plots (OHLC) using matplotlib can be found here:
可以在此处找到有关使用 matplotlib 的金融图 (OHLC) 的一些示例:
#!/usr/bin/env python from pylab import * from matplotlib.dates import DateFormatter, WeekdayLocator, HourLocator, \ DayLocator, MONDAY from matplotlib.finance import quotes_historical_yahoo, candlestick,\ plot_day_summary, candlestick2 # (Year, month, day) tuples suffice as args for quotes_historical_yahoo date1 = ( 2004, 2, 1) date2 = ( 2004, 4, 12 ) mondays = WeekdayLocator(MONDAY) # major ticks on the mondays alldays = DayLocator() # minor ticks on the days weekFormatter = DateFormatter('%b %d') # Eg, Jan 12 dayFormatter = DateFormatter('%d') # Eg, 12 quotes = quotes_historical_yahoo('INTC', date1, date2) if len(quotes) == 0: raise SystemExit fig = figure() fig.subplots_adjust(bottom=0.2) ax = fig.add_subplot(111) ax.xaxis.set_major_locator(mondays) ax.xaxis.set_minor_locator(alldays) ax.xaxis.set_major_formatter(weekFormatter) #ax.xaxis.set_minor_formatter(dayFormatter) #plot_day_summary(ax, quotes, ticksize=3) candlestick(ax, quotes, width=0.6) ax.xaxis_date() ax.autoscale_view() setp( gca().get_xticklabels(), rotation=45, horizontalalignment='right') show()
#!/usr/bin/env python from pylab import * from matplotlib.dates import DateFormatter, WeekdayLocator, HourLocator, \ DayLocator, MONDAY from matplotlib.finance import quotes_historical_yahoo, candlestick,\ plot_day_summary, candlestick2 # (Year, month, day) tuples suffice as args for quotes_historical_yahoo date1 = ( 2004, 2, 1) date2 = ( 2004, 4, 12 ) mondays = WeekdayLocator(MONDAY) # major ticks on the mondays alldays = DayLocator() # minor ticks on the days weekFormatter = DateFormatter('%b %d') # Eg, Jan 12 dayFormatter = DateFormatter('%d') # Eg, 12 quotes = quotes_historical_yahoo('INTC', date1, date2) if len(quotes) == 0: raise SystemExit fig = figure() fig.subplots_adjust(bottom=0.2) ax = fig.add_subplot(111) ax.xaxis.set_major_locator(mondays) ax.xaxis.set_minor_locator(alldays) ax.xaxis.set_major_formatter(weekFormatter) #ax.xaxis.set_minor_formatter(dayFormatter) #plot_day_summary(ax, quotes, ticksize=3) candlestick(ax, quotes, width=0.6) ax.xaxis_date() ax.autoscale_view() setp( gca().get_xticklabels(), rotation=45, horizontalalignment='right') show()
回答by karlacio
Are you free to use JRuby instead of Ruby? That'd let you use JFreeChart, plus your code would still be in Ruby
你可以自由地使用 JRuby 而不是 Ruby 吗?这会让您使用 JFreeChart,而且您的代码仍将使用 Ruby
回答by Aaron Watters
Please look at the Open Flash Chart embedding for WHIFF http://aaron.theitroadt.rutgers.edu/myapp/docs/W1100_1600.openFlashChartsAn example of a candle chart is right at the top. This would be especially good for embedding in web pages.
请查看 WHIFF 的 Open Flash Chart 嵌入 http://aaron.theitroadt.rutgers.edu/myapp/docs/W1100_1600.openFlashCharts蜡烛图的示例就在顶部。这对于嵌入网页尤其有用。
回答by Tomasz Worona
Open Flash Chart is nice choice if you like the look of examples. I've moved to JavaScript/Canvas library like Flotfor HTML embedded charts, as it is more customizable and I get desired effect without much hacking (http://itprolife.worona.eu/2009/08/scatter-chart-library-moving-to-flot.html).
如果您喜欢示例的外观,Open Flash Chart 是不错的选择。我已经转移到 JavaScript/Canvas 库,如用于 HTML 嵌入式图表的Flot,因为它更具可定制性,并且无需太多黑客攻击即可获得所需的效果(http://itprolife.worona.eu/2009/08/scatter-chart-library-移动到 flot.html)。
回答by Hymany Liu
This is the stock chart I draw just days ago using Matplotlib, I've posted the source too, for your reference: StockChart_Matplotlib
这是我几天前使用 Matplotlib 绘制的股票图表,我也发布了源代码,供您参考:StockChart_Matplotlib