私は、KMLファイルを読み込んでMatplotlib/Basemapにデータをプロットする簡単なアプリケーションを作成しようとしています - 「貧しい人のGoogle Earth」のようなものです。地理空間上のデータの分布のビュー。python - PyQtアプリケーションにMatplolib/Basemapを埋め込む
私の問題は、ユーザーインターフェイスにベースマップを埋め込むことです。以下のコードはアプリケーションを作成しますが、マップを表示する代わりに、軸のペアのみを表示します。
import warnings
import sys
import numpy as np
from PyQt4 import QtCore, QtGui
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from mpl_toolkits.basemap import Basemap
warnings.filterwarnings("ignore")
class MyMplCanvas(FigureCanvas):
def __init__(self, parent=None, width=5, height=4, dpi=100):
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
FigureCanvas.__init__(self, fig)
self.setParent(parent)
FigureCanvas.setSizePolicy(self,
QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
m = Basemap()
m.drawcoastlines(color='#777799')
m.drawcountries(color='#ccccee')
m.drawmapboundary()
m.bluemarble()
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent = None):
QtGui.QMainWindow.__init__(self)
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.fileMenu = QtGui.QMenu("&File", self)
self.fileMenu.addAction("Open...", self.fileOpen,
QtCore.Qt.CTRL + QtCore.Qt.Key_O)
self.fileMenu.addSeparator()
self.fileMenu.addAction("&Quit", self.fileQuit,
QtCore.Qt.CTRL + QtCore.Qt.Key_Q)
self.menuBar().addMenu(self.fileMenu)
self.statusBar().setSizeGripEnabled(True)
self.statusBar().showMessage("Ready")
self.items = QtGui.QDockWidget("Layers", self)
self.items.setFloating(False)
self.items.setFeatures(self.items.NoDockWidgetFeatures)
self.listWidget = QtGui.QListWidget()
self.listWidget.addItem("file1")
self.listWidget.addItem("file2")
self.listWidget.addItem("file3")
self.items.setWidget(self.listWidget)
self.main_widget = QtGui.QWidget(self)
l = QtGui.QVBoxLayout(self.main_widget)
sc = MyMplCanvas(self.main_widget, width=5, height=4, dpi=100)
l.addWidget(sc)
self.main_widget.setFocus()
self.setCentralWidget(self.main_widget)
self.setGeometry(100,100,650,350)
self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.items)
self.setWindowTitle("Poor's Man KML Viewer")
self.show()
def fileOpen(self):
filename = unicode(QtGui.QFileDialog.getSaveFileName(self,
"Open file", "",
"KML files (*.kml)"))
if filename:
self.listWidget.addItem(filename)
def fileQuit(self):
self.close()
def closeEvent(self, ce):
self.fileQuit()
def main():
app = QtGui.QApplication(sys.argv)
main = MainWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
はPyQtはアプリケーションにmatplotlibのプロットを埋め込むの良い例がありますが、私はどんな考慮ベースマップを見つけることができませんでした。
誰も私に手を差し伸べることはできますか?
ありがとうございます!
ありがとう!実際には、私は数分前にこれを分かっただけです!私はあなたの提案を反映するために質問を編集しました。ところで:地図をキャンバスの全領域に塗りつぶす方法はありますか?私はtight_layout()でいくつかの実験をしましたが、何も変わりませんでした。 – maurobio
これは質問&回答サイトです。質問に答えを与えることはあまり意味がないかもしれません。特に回答がすでに下に与えられている場合はそうです(そうでない場合はもちろん自分の質問に答えることができます)。今、 'tight_layout'に関する問題は明確ではありません - どこにコードがありますか?それを使用するなどの問題は何ですか? 2つの選択肢があります:この問題を編集して 'tight_layout'の問題を尋ねます(答えが役に立たないように答えが与えられた後に質問の意味を変更することは一般的には嫌ですが) 。 – ImportanceOfBeingErnest
tight_layoutの実験はこのコードでは実装されていません。とにかく、私はすでに潜在的な解決策を考案しています。ありがとう! – maurobio