diff --git a/gempy/assets/kriging.py b/gempy/assets/kriging.py
index 44440ec45..062a3e3c1 100644
--- a/gempy/assets/kriging.py
+++ b/gempy/assets/kriging.py
@@ -14,6 +14,9 @@
import numpy as np
import pandas as pd
+from gempy.plot import visualization_2d, plot, helpers
+import matplotlib.cm as cm
+import matplotlib.pyplot as plt
class kriging_model(object):
@@ -456,7 +459,7 @@ def create_gaussian_field(self):
self.results_sim_df = pd.DataFrame(data=d)
- def plot_results():
+ def plot_results_dep():
# probably set of functions for visualization
# some brainstorming:
# 1) 3D and 2D options for domain with colormaps of property
@@ -465,3 +468,69 @@ def plot_results():
# 4) options to plot variances
# ...
return None
+
+ def plot_results(self, geo_data, prop='val', direction='y', cell_number=0, contour=False,
+ cmap='viridis', alpha=0, legend=False):
+ """
+ TODO WRITE DOCSTRING
+ Args:
+ geo_data:
+ prop:
+ direction:
+ cell_number:
+ contour:
+ cmap:
+ alpha:
+ legend:
+
+ Returns:
+
+ """
+ a = np.full_like(self.mask, np.nan, dtype=np.double)
+ est_vals = self.results_df['est_value'].values
+ est_var = self.results_df['est_variance'].values
+
+ if prop == 'val':
+ a[np.where(self.mask == True)] = est_vals
+ elif prop == 'var':
+ a[np.where(self.mask == True)] = est_var
+ elif prop == 'both':
+ a[np.where(self.mask == True)] = est_vals
+ b = np.full_like(self.mask, np.nan, dtype=np.double)
+ b[np.where(self.mask == True)] = est_var
+ else:
+ print('prop must be val var or both')
+
+ p = visualization_2d.PlotSolution(geo_data)
+ _a, _b, _c, extent_val, x, y = p._slice(direction, cell_number)[:-2]
+
+ cmap = cm.get_cmap(cmap)
+ cmap.set_bad(color='w', alpha=alpha)
+
+ if prop is not 'both':
+
+ plot.plot_section(geo_data, direction=direction, cell_number=cell_number)
+ if contour == True:
+ im = plt.contourf(a.reshape(self.sol.grid.regular_grid.resolution)[_a, _b, _c].T, cmap=cmap,
+ origin='lower',
+ extent=extent_val)
+ else:
+ im = plt.imshow(a.reshape(self.sol.grid.regular_grid.resolution)[_a, _b, _c].T, cmap=cmap,
+ origin='lower',
+ extent=extent_val)
+ if legend:
+ helpers.add_colorbar(im, location='right')
+
+ else:
+ f, ax = plt.subplots(1, 2, sharex=True, sharey=True)
+ ax[0].title.set_text('Estimated value')
+ im1 = ax[0].imshow(a.reshape(self.sol.grid.regular_grid.resolution)[:, 2, :].T, cmap=cmap,
+ origin='lower',
+ extent=self.sol.grid.regular_grid.extent[[0, 1, 4, 5]])
+ helpers.add_colorbar(im1)
+ ax[1].title.set_text('Variance')
+ im2 = ax[1].imshow(b.reshape(self.sol.grid.regular_grid.resolution)[:, 2, :].T, cmap=cmap,
+ origin='lower',
+ extent=self.sol.grid.regular_grid.extent[[0, 1, 4, 5]])
+ helpers.add_colorbar(im2)
+ plt.tight_layout()
diff --git a/notebooks/kriging_examples/Plotting options.ipynb b/notebooks/kriging_examples/Plotting options.ipynb
index a57f68d1b..94a4fa80c 100644
--- a/notebooks/kriging_examples/Plotting options.ipynb
+++ b/notebooks/kriging_examples/Plotting options.ipynb
@@ -47,7 +47,7 @@
],
"source": [
"# set resolution, extent and input data\n",
- "geo_data = gp.create_data([0,1000,0,50,0,1000],resolution=[20,2,30], \n",
+ "geo_data = gp.create_data([0,1000,0,50,0,1000],resolution=[20,5,30], \n",
" path_o = os.pardir+\"/data/input_data/jan_models/model1_orientations.csv\",\n",
" path_i = os.pardir+\"/data/input_data/jan_models/model1_surface_points.csv\") "
]
@@ -61,39 +61,39 @@
"data": {
"text/html": [
"
| surface | series | order_surfaces | isBasement | color | id |
\n",
+ " } | surface | series | order_surfaces | isBasement | color | id |
\n",
" \n",
- " 0 | \n",
- " rock2 | \n",
- " Strat_Series | \n",
- " 1 | \n",
- " False | \n",
- " #015482 | \n",
- " 1 | \n",
+ " 0 | \n",
+ " rock2 | \n",
+ " Strat_Series | \n",
+ " 1 | \n",
+ " False | \n",
+ " #015482 | \n",
+ " 1 | \n",
"
\n",
" \n",
- " 1 | \n",
- " rock1 | \n",
- " Strat_Series | \n",
- " 2 | \n",
- " False | \n",
- " #9f0052 | \n",
- " 2 | \n",
+ " 1 | \n",
+ " rock1 | \n",
+ " Strat_Series | \n",
+ " 2 | \n",
+ " False | \n",
+ " #9f0052 | \n",
+ " 2 | \n",
"
\n",
" \n",
- " 2 | \n",
- " basement | \n",
- " Basement_Series | \n",
- " 1 | \n",
- " True | \n",
- " #ffbe00 | \n",
- " 3 | \n",
+ " 2 | \n",
+ " basement | \n",
+ " Basement_Series | \n",
+ " 1 | \n",
+ " True | \n",
+ " #ffbe00 | \n",
+ " 3 | \n",
"
\n",
"
"
],
@@ -155,26 +155,86 @@
"sol = gp.compute_model(geo_data)"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
+ "outputs": [],
+ "source": [
+ "import gempy as gp\n",
+ "#importlib.reload(kriging)\n",
+ "from gempy.assets import kriging"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "test_data = np.array([[110,0,510,2],[910,0,510,1],[510,0,530,1],[310,0,410,5]])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Creating a kriging object with model solution and input domain (by id) and conditioning data\n",
+ "kriging_model = kriging.kriging_model(model=sol, domain=[1,3],data=test_data)\n",
+ "\n",
+ "kriging_model.krig_grid = np.round(kriging_model.krig_grid,0)\n",
+ "\n",
+ "# set some parameters, not final yet\n",
+ "kriging_model.range_ = 200\n",
+ "kriging_model.moving_neighbourhood = 'all'\n",
+ "kriging_model.set_kriging_type('OK')\n",
+ "kriging_model.nugget = 2\n",
+ "kriging_model.sill = np.var(test_data[:,3])\n",
+ "\n",
+ "kriging_model.create_kriged_field()\n",
+ "#kriging_model.results_df.head()\n",
+ "kriging_model.plot_results(geo_data=geo_data, prop='val', contour=False, direction='y', cell_number=2, alpha=.5)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
"outputs": [
{
"data": {
+ "image/png": "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H1WDBg301ltvaciQIXr77bfVtGlTr/qrVq3S5MmTNWbMGPXv31+SdO+995bqR1ZWlr777jvFxsaWy7jLCuEOAAD4VJ06dTRmzBg5HA5NnTpVx44d04oVK3TllVdKkjp27KjbbrtNM2bM0F/+8hd9+umn2rZtmxYsWKC4uDhJUnR0tO6++259/vnnXuHu448/1vjx45WYmKhBgwadtg8nTpzQ2LFjVa1aNd1///1lO+AyRrgrC369OrwZlh8P0vjtH0wO1Z/vTGGyb8Zv+WLwNi2G13I3eryZPj78+XjzYw7T9yzCWV177bVy/OcWNGlpaWrdurUn2EmS0+nUTTfdpJdeeklut1tbtmxRYGCgOnTo4GlTpUoVrVy50qvuV199pdWrV+vqq6/W0KFDT/v73W63RowYoYyMDL300kuqU6eO4RGWLz5zBwAAfOqyyy7z/Pvo0aO6/PLLS7W5/PLLZVmWcnJydOTIEYWGhnoC4el8++23io2NVWZmpt55551Tttm/f7/uu+8+paena9asWerSpcvFDcYPEO4AAIDfqFmzpn777bdS23/55RdJUkhIiFwulw4fPlyqzVdffaVvvvnG833Hjh01f/58de3aVdOnTy9V97vvvlOfPn20f/9+LV68WN26dTM8Gt8g3AEAAL/Rpk0bbdmyRQcOHPBsKy4u1kcffaTrr79egYGBat26tfLy8rR582ZPm6KiIj3xxBN64403PNtKzgA+9dRTKigo0OTJkz37fv75Zw0YMECStHz5crVp06aMR1Z+CHcAAMBvJCQkKDg4WP3799f777+vDRs2aOjQodq1a5dGjRolSerUqZNatGihMWPGaMWKFdq8ebMef/xxr8D2e1deeaVGjhypNWvWaOPGjZKk559/Xr/99ptGjBght9utbdu2eb527dpVjiM2jwsqAACA36hdu7aWL1+uGTNmaOLEiSouLlbz5s2VkpKitm3bSpICAgK0aNEizZgxQzNnztSJEyfUrFkzpaSkqHHjxqes279/f61atUrPPvus2rRpo08++USSNHHixFJtY2Ji9Nprr5XZGMuaw7JYWdqUqKgoZefmqWZ0gq+7Uvb8+KgxvjC80UXrzdUyXc9RZPCKVOPj5GpZv6hXWRi4Qv6XXUskSd/syLj4YmeRmLJW2/f8XOa/52wiGoQpOaG7r7sBceYOAIAKjUCF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6tWrS5KqVKmiZ599Vt9//71++eUXPfbYY+rXr5+nfbVq1fTwww/ru+++U4sWLfTFF1+offv2uummmyRJbdu21SWXXKKQkBBJ0urVq7Vz506tWLFC119/vSSpQ4cO6t27t2bNmqWUlBRP7WbNmumpp56SJP3hD3/QX//6V1122WV65plnJEnt27fXmjVrtG3bNnXv3v28av/hD39QUlKSp05GRobWr18vSbr66qsVGhqqwMBAtWzZ8qLmk3AHAAB8Ki4uzhPsJOnGG2/UpEmTlJGRoVmzZkmSDh06pN27dysrK0sbNmyQJBUUFEg6GebefPNNHThwQHFxcYqLi9OIESM89f7xj38oLCxMTZo0UWFhoWd7p06d9Oqrryo/P1+BgYGSpBYtWnj2h4SEKCAgQBEREZ5tDodDtWrV0rFjx867dqtWrbzGXadOHc/ZR5MIdwAAwKcuv/xyr+9DQ0MlSb/88osyMjL07LPPKiMjQzVq1NA111yjunXrSpLnc29PPfWU6tSpo3fffVfPPfecnnvuOUVGRmrSpEn6wx/+oCNHjujAgQNq1qzZKX//4cOHFRYWJkkKCgoqtb9GjRqn7fv51P59gJUkp9Op4mLzN5Ek3AEAAJ86evSo1/clFxlUr15dgwcPVpMmTfTBBx+oYcOGcjqd2rRpk9auXetpHxgYqOHDh2v48OH66aeftGHDBs2dO1dPPPGE3nvvPblcLjVq1EhTp0495e8vefv2QpRl7QvFBRUAAMCn/vGPf6ioqMjz/Zo1ayRJkZGROnLkiAYMGKBrrrlGTufJ2PLpp59KOnnmLj8/Xz169NDixYslSXXr1lW/fv108803a//+/ZKkNm3a6KefflLt2rV1/fXXe77+9re/acmSJapateoF991k7YCAgAvux+9x5g4AAPjUgQMHNGrUKPXt21c7duxQcnKy7rzzToWHhys4OFhz586Vw+GQ0+nUunXr9M4770iScnNzFRgYqOuvv14vv/yyqlatquuuu06ZmZlauXKlunfvLkm68847tXTpUiUkJGjo0KEKCwvTxo0blZKSopEjR17Ucl8ma7tcLv3222/atGmTmjRpotq1a19Qnwh3AADAp/r27aujR4/qoYceUvXq1fXAAw/o0UcfVdWqVTV37lxNmzZNjzzyiIKCgtSkSRMtXbpUDz74oLZs2aK4uDg9++yzCgkJ0eLFi/Xrr7/qsssuU+/evZWYmCjp5Ofoli1bphdffFFTpkxRTk6O/u///k9PP/207r///ovqu8na99xzjzZu3KgRI0YoMTFRgwcPvqA+OSzL5MrSlVtUVJSyc/MU3C7BSD3LxNrVlZDJhdwlyVl09jbnXKvA7NMtwGA9k31z5psdp7PA3IPqLDLbN0ehuXqOYsMvxyZf3g13zWGwb9ZFLrJeivPi6/3w63JJ0jff/Ouia51VBV9bFuZx5g4AgIqMQIX/wQUVAAAANkK4AwAAsBHCHQAAgI0Q7gAAAGyEcAcAAGAjFSLcLV++XD179lTLli3Vq1cvvfvuu177U1NTdddddykiIkKdO3f23KX69zIyMhQfH6/IyEjFxsZq5syZngWHAQAA7MLvw91bb72lSZMmqWPHjpo7d67atWunJ554wrM0SXp6uoYNG6aGDRtqzpw56tWrl6ZNm6ZFixZ5amRlZWnAgAGqVq2akpOTNXDgQKWkpCgpKclXwwIAACgTfn+fu5UrV6pt27YaO3asJKldu3b617/+pT//+c/q2bOnZs+eraZNm2r69OmSpA4dOqiwsFDz589XfHy8AgMDtWDBArlcLs2dO1eBgYGKi4tT9erVNXnyZM9SIQAAAHbg92fu8vLyFBQU5LXt0ksv1ZEjR5SXl6e0tDR169bNa3/37t117NgxpaenS5I2b96sTp06KTAw0NOmR48eKioqUmpqatkPAgAAoJz4fbh74IEH9Pe//11r1qyR2+3WRx99pI0bN+q2227Tvn37VFBQoPDwcK+fqV+/viQpMzNTx48f1/79+0u1CQ0NVXBwsDIzM8ttLAAAAGXN79+Wvfnmm/XPf/7Ts/ivJN1xxx0aPHiwtm7dKkkKDg72+pmSM31ut1vZ2dmnbFPSzu12n3NfoqKizrg/OztbCgg8YxsAAICy5Pfhbvjw4dq6dauefPJJNW3aVNu3b9fcuXMVHBysm266SZLkOM2i0U6nU9Z/Fqc+VRvLsuR0mj95aZlaw9rwWtiW35+nNcT0vJlcMN1w30xyFJmr5Swyu8q8s9BcPUdhsbFakuQwOFZHkeG+FRt8HIw+ESQZHKrD9Gubif8XDE8XcD78Otylp6crNTVVSUlJuvPOOyVJ0dHRqlmzpp555hn17t1bkkqdfSv53uVyec7YneoMXW5urlwu1zn3Jy0t7Yz7o6KilJ2bd871AAAATPPrczk//fSTJKlVq1Ze20veHt2xY4cCAgK0d+9er/0l34eHhysoKEhhYWHKysryanPw4EG53e5Sn8UDAACoyPw63JUEry+//NJr+7Zt2yRJDRs2VFRUlNatW+d5+1WS1q5dK5fLpebNm0uS2rdvrw0bNig/P9+rTUBAgKKjo8t6GAAAAOXGr9+Wbdasmbp06aIXXnhBOTk5atKkif71r3/plVdeUYcOHRQREaHhw4crISFBo0aN0h133KGtW7dq0aJFevzxx1WjRg1J0uDBg/XBBx9oyJAh6t+/v/bs2aOZM2eqT58+qlu3ro9HCQAAYI7Dskx/Stas/Px8vfzyy3r33Xd18OBBXXXVVbrllls0ZMgQz33rPv74Y82ePVuZmZkKCwtTv379NHDgQK86aWlpmjZtmnbs2KGQkBDdfvvtevjhh1W1alVjfS35zF1Q+wQzBbmg4oI4zH4mXc5Cc7UC8s0+3UzWCzhhsFa+2QfBabAeF1RcID++oML4e1AGLqjYe+RtSdI3O/910bWA8+X34a4iIdz5B8LdBdYi3F1YPcLdhSHcAWWmkvx3DwAAUDkQ7gAAAGyEcAcAAGAjhDsAAAAbIdwBAADYCOEOAADARvz6JsYVlqHIbPnzrVAM980ow30zeTcJE+uRlxWTt81wFJq9bYbJ25c4Td8KxWA907dpUbHBvhm85YtplsPwkz7A8OMAlDM//q8GAAAA54twBwAAYCOEOwAAABsh3AEAANgI4Q4AAMBGCHcAAAA2QrgDAACwEcIdAACAjRDuAAAAbIRwBwAAYCOEOwAAABsh3AEAANhIFV93wHYckmVoDWsrwEwdTz2nucW1TffNJIfhNb+dMrdgulVgeIFzg30zOW/OArMPgjO/yFgth+G+OYoM9q3Q8MFbZLCewXFKkqPY3LErg69tkqSAi3+BM/1MB84HZ+4AAABshHAHAABgI4Q7AAAAGyHcAQAA2AjhDgAAwEYIdwAAADZCuAMAALARwh0AAICNEO4AAABshHAHAABgI4Q7AAAAGyHcAQAA2EgVX3fAjixDkdkyvBh2scFH2zJ85FgGh+owuB65JFkOc51zFpjtnNF5M7iQu6PQ4IL1kpz55hatdxSYqyVJKjRYr8hs3xwm+1ZQaK6WZHSsDoPPUUlSYNWLr1HV8AsRcB44cwcAAGAjhDsAAAAbIdwBAADYCOEOAADARgh3AAAANkK4AwAAsBHCHQAAgI0Q7gAAAGyEcAcAAGAjhDsAAAAbIdwBAADYCOEOAADARgwv/w5JspxmFrG2AoyU+W89g492UaC5WpJk+fGfGQEG++YsMFdLkmRwwXRHobmFzp35ZheZd5isV2huwXpJcpisV2S2b8rLN1bKMlhLkqxCs8eISY7q1S++SK2LLwFcKD/+LxUAAADni3AHAABgI4Q7AAAAGyHcAQAA2AjhDgAAwEYIdwAAADZCuAMAALARwh0AAICNEO4AAABshHAHAABgI4Q7AAAAGyHcAQAA2IjBpeThYSgyWwFm6pQormqwVqC5WifrmVu03nIYK3WyXoC5gs58s50rDjA3b86iYnO1TphdFN5xwuCi9cXmxilJMjhvKigwV0uSlWdu3opzc43VkiQrL89oPZOcBh4Hq6a55yZwvjhzBwAAYCOEOwAAABsh3AEAANgI4Q4AAMBGCHcAAAA2QrgDAACwkQoR7r788kv17dtXERERio2N1XPPPaecnBzP/tTUVN11112KiIhQ586dtXjx4lI1MjIyFB8fr8jISMXGxmrmzJkqMHzbAQAAAF/z+3C3bds2JSQk6IorrtC8efM0YsQIvfvuu5owYYIkKT09XcOGDVPDhg01Z84c9erVS9OmTdOiRYs8NbKysjRgwABVq1ZNycnJGjhwoFJSUpSUlOSrYQEAAJQJv7+J8YwZM9SyZUu99NJLcjgcateunYqLi5WSkqLjx49r9uzZatq0qaZPny5J6tChgwoLCzV//nzFx8crMDBQCxYskMvl0ty5cxUYGKi4uDhVr15dkydP1tChQxUWFubjUQIAAJjh12fuDh06pLS0NPXt21cOx3/v7N+vXz+tX79eTqdTaWlp6tatm9fPde/eXceOHVN6erokafPmzerUqZMCA/+7rEKPHj1UVFSk1NTU8hkMAABAOfDrM3fffvutLMtSrVq1lJiYqI0bNyogIEC33HKLnnzySf3www8qKChQeHi418/Vr19fkpSZmamIiAjt37+/VJvQ0FAFBwcrMzPznPsTFRV1xv3Z2dlSFcPrcgEAAJwHvw53hw4dkiSNGzdOXbt21bx587Rz504lJycrLy9P99xzjyQpODjY6+eCgoIkSW63+2TgOkWbknZut7sshwAAAFCu/Drc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\n",
"text/plain": [
- ""
+ "